Remodelación de datos para el aprendizaje profundo usando Keras

10

Soy un principiante en Keras y he comenzado con el ejemplo MNIST para comprender cómo funciona realmente la biblioteca. El fragmento de código del problema MNIST en la carpeta de ejemplo de Keras se proporciona como:

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')
..........

No puedo entender la función de remodelación aquí. ¿Qué está haciendo y por qué lo hemos aplicado?

enterML
fuente

Respuestas:

8

mnist.load_data()suministra los dígitos MNIST con estructura, (nb_samples, 28, 28)es decir, con 2 dimensiones por ejemplo que representan una imagen en escala de grises 28x28.

Sin embargo, las capas Convolution2D en Keras están diseñadas para trabajar con 3 dimensiones por ejemplo. Tienen entradas y salidas de 4 dimensiones. Esto cubre imágenes en color (nb_samples, nb_channels, width, height), pero lo más importante, cubre capas más profundas de la red, donde cada ejemplo se ha convertido en un conjunto de mapas de características, es decir (nb_samples, nb_features, width, height).

La imagen en escala de grises para la entrada de dígitos MNIST necesitaría un diseño de capa CNN diferente (o un parámetro para el constructor de capas para aceptar una forma diferente), o el diseño podría simplemente usar un CNN estándar y debe expresar explícitamente los ejemplos como 1 canal imágenes El equipo de Keras eligió el último enfoque, que necesita una reforma.

Neil Slater
fuente
¿Puede explicar la lógica detrás de la "np.random.seed (1337)" utilizada en el código? ¿Por qué 1337?
enterML
2
Nada especial sobre 1337 para los propósitos del guión, excepto la repetibilidad. Es una buena práctica sembrar su RNG para que pueda repetir su trabajo exitoso exactamente en otra ocasión. El número es una broma interna para los hackers: urbandictionary.com/define.php?term=1337
Neil Slater