0

Распознавание рукописного текста (MNIST) – 03

В третьей серии курса MNIST я затрону такие темы как: разложение данных (картинок) на одномерный массив , лист.. с помощью функции reshape , из математической библиотеки питона numpy,

и нормализация данных . Делаться это будет для того , что бы наши данные скармливаемые сетке , были «съедобными» , и нейросеть понимала , что мы подаем ей на вход корректные данные , в том виде , в каком она их может корректно обрабатывать.

«Выпрямим» наш массив картинок , средствами библиотеки numpy используя функцию reshape , но для начала разберемся , что из себя представляет один экземпляр (1 картинка) нашего массива. изначально это двумерный массив 28 на 28 пикселей

Но наша будущая сетка прямого распространения ( Sequential )
и подключаемый слой Dense не может принять эти данные , слой Dense принимает на вход одномерный массив , значит нам нужно все пиксели нашего изображения разложить в один ряд

на выходе получим одномерный массив 784 (28 умножаем на 28, x*y)

И конечно же мы не станем делать этого вручную , силы нам еще пригодятся , используем функции библиотеки numpy, нам понадобится функция — reshape , которая и разложит нашу картинку.

#

x_train_re = X_train.reshape(60000, 784)
x_test_re = X_test.reshape(10000, 784)

создаем новые переменные и перезаписываем в них наши иксы ( массивы с картинками)
, но уже одномерные. в X_train.reshape(60000, 784) , в качестве двух аргументов подается: количество картинок (60000) , и длина нашего нового разложенного массива. Теперь это 60 000 длинных массивов. До преобразования содержимое выглядело так- (60000, 28, 28)

и теперь если мы попытаемся вывести картинку , интерпретатор выдаст ошибку. так как наши значения теперь уже не в виде картинки , а в виде длинного массива:

как мы можем заметить , значения в диапазоне от 0 до 255 , некая градация цветов пикселей.
но сетке не очень понравится такое , она обработает подобное , но результат будет хуже , чем если мы нормализуем наши данные ,
то есть приведем к виду не 0 -255 а от 0 до 1
что бы на выходе получить подобное :

Нормализация

процедура не сложная , нам всего лишь надо поделить каждое значение на 255 , предварительно преобразовать каждое значение в тип float (число с плавающие точкой).

для преобразования нашего массива во float , воспользуемся еще одной функцией библиотеки numpy — astype . На выходе получим массив у которого все значения float.

#

x_train = x_train_re.astype('float32')
x_train = x_train / 255

x_test = x_test_re.astype('float32')
x_test = x_test / 255 

Теперь нам точно понятно , как разложить нашу картинку , и нормализовать ее, мы провели две необходимые процедуры подготовки данных , для того , что бы наша сеть смогла без проблем принять данные на вход.

Встретимся в следующем уроке.

Поделиться ссылкой:

3deeper

Добавить комментарий

Ваш адрес email не будет опубликован.