Kerasを使用したディープラーニングのためのデータの再形成


10

私はケラスの初心者であり、ライブラリが実際にどのように機能するかを理解するためにMNISTの例から始めました。Kerasサンプルフォルダー内のMNIST問題のコードスニペットは次のようになります。

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を表す例ごとに2次元を提供します。

ただし、KerasのConvolution2Dレイヤーは、例ごとに3次元で機能するように設計されています。4次元の入力と出力があります。これはカラー画像をカバーします(nb_samples, nb_channels, width, height)が、より重要なのは、各例がフィーチャマップのセットになったネットワークのより深い層をカバーすること(nb_samples, nb_features, width, height)です。

MNIST桁入力のグレースケールイメージは、異なるCNNレイヤーデザイン(またはレイヤーコンストラクターのパラメーターが異なる形状を受け入れるためのパラメーター)を必要とするか、デザインで標準CNNを使用するだけで、例を1チャネルとして明示的に表現する必要があります画像。Kerasチームは、再形成が必要な後者のアプローチを選択しました。


コードで使用されている「np.random.seed(1337)」の背後にあるロジックについて説明していただけますか?なぜ1337なのか?
enterML

2
再現性を除いて、スクリプトの目的のために1337について特別なことは何もありません。RNGをシードして、成功した作業を別の機会に正確に繰り返すことができるようにすることをお勧めします。この数値は、ハッカーのための内部ジョークの一部です-urbandictionary.com/define.php?term=1337
Neil Slater
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.