我想在Keras中實現反捲積。我的模型定義如下:如何在Keras/Theano中執行反捲積?
model=Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same',
input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3,border_mode='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
欲由第一卷積層即convolution2d_1
給出的輸出信號進行去卷積或轉置卷積。
可以說我們在第一個卷積圖層後的特徵圖是X
這是(9, 32, 32, 32)
其中9是尺寸爲32x32
的圖像no我穿過了圖層。第一層的權重矩陣由Keras的get_weights()
函數獲得。權重矩陣的維數爲(32, 3, 3, 2)
。
我使用進行換位卷積碼是
conv_out = K.deconv2d(self.x, W, (9,3,32,32), dim_ordering = "th")
deconv_func = K.function([self.x, K.learning_phase()], conv_out)
X_deconv = deconv_func([X, 0 ])
但得到錯誤:
CorrMM shape inconsistency:
bottom shape: 9 32 34 34
weight shape: 3 32 3 3
top shape: 9 32 32 32 (expected 9 3 32 32)
誰能請告訴我,我錯了?