Keras で最初の一歩を踏み出し、レイヤーのサイズに苦労しています。現在、MNIST データセットを使用してトレーニングしたい畳み込みオートエンコーダーを構築しています。残念ながら、寸法を正しく取得できないようで、どこが間違っているのかわかりません。
私のモデルは次の方法で構築されています。
def build_model(nb_filters=32, nb_pool=2, nb_conv=3):
input_img = Input(shape=(1, 28, 28))
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)
return Model(input_img, decoded)
データは次を使用して取得されます。
def load_data():
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 1, 28, 28))
x_test = np.reshape(x_test, (len(x_test), 1, 28, 28))
return x_train, x_test
ご覧のとおり、画像を正規化して白黒で表示し、単純に自動エンコーダーをトレーニングして復元できるようにしようとしています。
以下に、私が得ているエラーを見ることができます:
トレースバック (最新の呼び出しが最後): ファイル "C:/Users//Documents/GitHub/main/research/research_framework/experiment.py", line 46, in callbacks=[EarlyStopping(patience=3)]) ファイル "C: \Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\keras\engine\training.py", line 1047, in fit batch_size=batch_size) ファイル "C:\Users\AppData\Local\Continuum\Anaconda2\ lib\site-packages\keras\engine\training.py", line 978, in _standardize_user_data exception_prefix='model target') ファイル "C:\Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\keras\ engine\training.py", line 111, in standardize_input_data str(array.shape)) 例外: モデル ターゲットをチェックするときのエラー: convolution2d_7 が形状 (None, 8, 32, 1) を持っていると予想されましたが、形状 (60000L, 1L) の配列を取得しました、28L、28L) パラメータの合計: 8273
プロセスは終了コード 1 で終了しました
このエラーを解読するのを手伝ってくれませんか? モデルの構築とこの種の問題への対処について、Keras の Web サイト以外に資料はありますか?
乾杯