Rimodellamento dei dati per l'apprendimento profondo mediante Keras


10

Sono un principiante di Keras e ho iniziato con l'esempio MNIST per capire come funziona effettivamente la libreria. Lo snippet di codice del problema MNIST nella cartella di esempio di Keras è dato come:

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

Non riesco a capire la funzione di risagoma qui. Cosa sta facendo e perché l'abbiamo applicato?

Risposte:


8

mnist.load_data()fornisce le cifre MNIST con struttura, (nb_samples, 28, 28)ovvero con 2 dimensioni per esempio che rappresentano un'immagine in scala di grigi 28x28.

I livelli Convolution2D in Keras, tuttavia, sono progettati per funzionare con 3 dimensioni per esempio. Hanno ingressi e uscite a 4 dimensioni. Questo copre le immagini a colori (nb_samples, nb_channels, width, height), ma, soprattutto, copre i livelli più profondi della rete, dove ogni esempio è diventato un insieme di mappe delle caratteristiche (nb_samples, nb_features, width, height).

L'immagine in scala di grigi per l'input delle cifre MNIST avrebbe bisogno di un diverso design del layer CNN (o di un parametro per il costruttore del layer per accettare una forma diversa), oppure il design potrebbe semplicemente utilizzare un CNN standard ed è necessario esprimere esplicitamente gli esempi come 1 canale immagini. Il team di Keras ha scelto quest'ultimo approccio, che necessita di una nuova forma.


Potete per favore spiegare la logica dietro "np.random.seed (1337)" usato nel codice? Perché 1337?
enterML,

2
Niente di speciale sul 1337 ai fini della sceneggiatura tranne la ripetibilità. È buona pratica seminare il tuo GNN in modo che tu possa ripetere il tuo lavoro di successo esattamente in un'altra occasione. Il numero è un po 'uno scherzo per gli hacker - urbandictionary.com/define.php?term=1337
Neil Slater
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.