Шаг 161.
Глубокое обучение на Python. Обобщенный процесс машинного обучения. Разработка модели. Подготовка данных. Нормализация значений

    На этом шаге мы рассмотрим необходимость и реализацию нормализации.

    На 26 шаге, в примере классификации рукописных цифр из набора MNIST, исходные черно-белые изображения цифр были представлены массивами целых чисел в диапазоне 0-255. Прежде чем передать эти данные в сеть, нам понадобилось привести числа к типу float32 и разделить каждое на 255, в результате чего у нас получились массивы чисел с плавающей точкой в диапазоне 0-1. Аналогично в примере с предсказыванием цен на дома у нас имелись наборы признаков со значениями в разных диапазонах: некоторые признаки были выражены значениями с плавающей точкой, другие - целочисленными значениями. Перед отправкой данных в сеть нам понадобилось нормализовать каждый признак в отдельности, чтобы все они имели среднее значение, равное 0, и стандартное отклонение, равное 1.

    Вообще, небезопасно передавать в нейронную сеть данные, принимающие очень большие значения (например, целые числа с большим количеством значимых разрядов, которые намного больше начальных значений, принимаемых весами сети), или разнородные данные (например, такие, в которых один признак определяется значениями в диапазоне 0-1, а другой - в диапазоне 100-200). Это может привести к значительным изменениям градиента, которые будут препятствовать сходимости сети. Чтобы упростить обучение сети, данные должны:

    Кроме того, может оказаться полезной (хотя и не всегда необходимой - так, мы не использовали ее в примере классификации цифр) следующая практика нормализации:

    Это легко реализуется с применением массивов NumPy:

# Предполагается, что x - это двумерная матрица
# данных с формой (образцы, свойства)
x -= x.mean(axis=0)	
х /= x.std(axis=0)

    На следующем шаге мы рассмотрим обработку недостающих значений.




Предыдущий шаг Содержание Следующий шаг