1

私はKerasに畳み込みオートエンコーダーを構築しようとしています。 stride> 1を設定するか、border_mode = 'valid'を設定しない限り、畳み込みレイヤーは入力と同じ出力ディメンションを持つという印象を受けました。ここに私のネットワークです畳み込みレイヤはKerasの出力の次元を減少させますか?

from keras.layers import Convolution2D, MaxPooling2D, UpSampling2D, Activation 
from keras.models import Model, Sequential 
model = Sequential() 
model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(1, 1920, 1080))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D((2, 2), border_mode='same')) 
model.add(Convolution2D(8, 3, 3, border_mode='same')) 
model.add(Activation('relu')) 
model.add(UpSampling2D((2, 2))) 
model.add(Convolution2D(8, 3, 3, border_mode='same')) 
model.add(Activation('relu')) 
model.add(UpSampling2D((2, 2))) 
model.compile(optimizer='adadelta', loss='binary_crossentropy') 

最初の層の出力寸法を確認すると、y座標の長さが減少したように見えます。

>>>model.layers[0].output_shape 
(None, 1, 1920, 16) 

この原因は何ですか。私は16がどこから来ているのか分かりません。 1080と単純な関係はないようです。

答えて

1

この問題はいわゆるimage_orderingにあります。これはあなたが使用してバックエンドに応じて - あなたが指定した形式でデータを提供する必要があります。thため

  • あなたはフォーマットのデータを提供しなければならない注文(Theano)画像:

    [batches, channels, image_width, image_weight] 
    

    これは形式ですあなたは正しいと仮定しています。 tf(TensorFlow)画像の順序のための

  • は次のとおりです。

    [batches, width, height, channels] 
    

    これはあなたのKerasのインストールは、あなたの入力をinterprettingされる形式です。

ケラスでのデフォルトの画像順序はtfであり、これが原因で問題が発生していると思われます。次のコマンドにより、あなたの画像の順序を確認することがあります。

from keras.backend import image_dim_ordering 
print image_dim_ordering() # Assuming that you're using a Python 2.* 

あなたはhere説明されているものkeras.jsonを変更することで、それを変更することがあります。

model.summary()の結果を印刷することで、モデルの詳細を確認して実際にそうであることを確認することもできます。

関連する問題