Przekształcanie danych do głębokiego uczenia się za pomocą Keras


10

Jestem początkującym w Keras i zacząłem od przykładu MNIST, aby zrozumieć, jak biblioteka faktycznie działa. Fragment kodu problemu MNIST w przykładowym folderze Keras podano jako:

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

Nie mogę tutaj zrozumieć funkcji zmiany kształtu. Co robi i dlaczego go zastosowaliśmy?

Odpowiedzi:


8

mnist.load_data()dostarcza cyfrom MNIST strukturę (nb_samples, 28, 28)tj. o 2 wymiarach na przykład reprezentujących obraz w skali szarości 28x28.

Warstwy Convolution2D w Keras są jednak zaprojektowane do pracy z 3 wymiarami na przykład. Mają 4-wymiarowe wejścia i wyjścia. Obejmuje to kolorowe obrazy (nb_samples, nb_channels, width, height), ale co ważniejsze, obejmuje głębsze warstwy sieci, gdzie każdy przykład stał się zestawem map obiektów, tj (nb_samples, nb_features, width, height).

Obraz w skali szarości dla danych wejściowych cyfr MNIST wymagałby albo innego projektu warstwy CNN (lub paramela do konstruktora warstw, aby zaakceptował inny kształt), albo projekt mógłby po prostu użyć standardowego CNN i musisz jawnie wyrazić przykłady jako 1-kanałowe obrazy. Zespół Keras wybrał to drugie podejście, które wymaga zmiany kształtu.


Czy możesz wyjaśnić logikę „np.random.seed (1337)” użytego w kodzie? Dlaczego 1337?
wpisz ML

2
Nic specjalnego w 1337 do celów skryptu, z wyjątkiem powtarzalności. Dobrą praktyką jest wysiewanie RNG, abyś mógł powtórzyć swoją udaną pracę dokładnie przy innej okazji. Liczba jest trochę wewnętrznym żartem dla hakerów - urbandictionary.com/define.php?term=1337
Neil Slater
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.