Remodelage des données pour un apprentissage en profondeur à l'aide de Keras

10

Je suis un débutant de Keras et j'ai commencé avec l'exemple MNIST pour comprendre comment la bibliothèque fonctionne réellement. L'extrait de code du problème MNIST dans le dossier d'exemples Keras est donné comme suit:

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

Je ne peux pas comprendre la fonction de remodelage ici. Que fait-il et pourquoi l'avons-nous appliqué?

enterML
la source

Réponses:

8

mnist.load_data()fournit les chiffres du MNIST avec une structure (nb_samples, 28, 28)c'est-à-dire avec 2 dimensions par exemple représentant une image en niveaux de gris 28x28.

Cependant, les couches Convolution2D de Keras sont conçues pour fonctionner avec 3 dimensions par exemple. Ils ont des entrées et sorties à 4 dimensions. Cela couvre les images en couleur (nb_samples, nb_channels, width, height), mais plus important encore, il couvre les couches plus profondes du réseau, où chaque exemple est devenu un ensemble de cartes d'entités, par exemple (nb_samples, nb_features, width, height).

L'image en niveaux de gris pour l'entrée des chiffres MNIST aurait besoin d'une conception de couche CNN différente (ou d'un paramètre du constructeur de couche pour accepter une forme différente), ou la conception pourrait simplement utiliser un CNN standard et vous devez exprimer explicitement les exemples comme 1 canal images. L'équipe Keras a choisi cette dernière approche, qui a besoin d'être remodelée.

Neil Slater
la source
Pouvez-vous expliquer la logique derrière le "np.random.seed (1337)" utilisé dans le code? Pourquoi 1337?
enterML
2
Rien de spécial à propos de 1337 aux fins du script, sauf la répétabilité. C'est une bonne pratique de semer votre RNG afin que vous puissiez répéter votre travail réussi exactement à une autre occasion. Le numéro est un peu une plaisanterie intérieure pour les pirates - urbandictionary.com/define.php?term=1337
Neil Slater