Переформатування даних для глибокого навчання за допомогою Keras


10

Я початківець з Керасом, і я почав із прикладу MNIST, щоб зрозуміти, як насправді працює бібліотека. Фрагмент коду проблеми MNIST у папці приклад Keras задається як:

import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten  
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils

batch_size = 128
nb_classes = 10
nb_epoch = 12

# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3

# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
..........

Я не можу зрозуміти функцію переформатування тут. Що це робить і чому ми застосували це?

Відповіді:


8

mnist.load_data()надає цифри MNIST за структурою, (nb_samples, 28, 28)тобто з двома розмірами на приклад, що представляють зображення сірого масштабу 28x28.

Проте шари Convolution2D у Keras розроблені для роботи з 3 вимірами на приклад. Вони мають 4-мірні входи та виходи. Це охоплює кольорові зображення (nb_samples, nb_channels, width, height), але, що ще важливіше, воно охоплює більш глибокі шари мережі, де кожен приклад став набором карт функцій, тобто (nb_samples, nb_features, width, height).

Зображення сірого масштабу для введення цифр MNIST потребує або іншого дизайну шару CNN (або параметр конструктору шарів, щоб прийняти іншу форму), або дизайн може просто використовувати стандартний CNN, і ви повинні чітко виражати приклади як 1-канальний образи. Команда Керара обрала останній підхід, який потребує переформування.


Чи можете ви пояснити логіку "np.random.seed (1337)", що використовується в коді? Чому 1337?
enterML

2
Нічого особливого в 1337 для цілей сценарію, крім повторюваності. Рекомендується посіяти свій RNG, щоб ви могли повторити свою успішну роботу саме з іншого приводу. Цифра
Ніл Слейтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.