1

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 サイト以外に資料はありますか?

乾杯

4

2 に答える 2

1

その理由は、keras.json でバックエンドの構成を変更している間、画像の次元を変更しなかったため、まだ tensorflow に設定されていたためです。

次のように変更します。

{
    "image_dim_ordering": "th", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "theano"
}

トリックをしました。

于 2016-10-14T09:04:20.003 に答える