【发布时间】:2017-04-07 18:02:39
【问题描述】:
我正在尝试在 Keras 中实现反卷积。我的模型定义如下:
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 的图像的数量。 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)
谁能告诉我哪里出错了?
【问题讨论】:
标签: python deep-learning theano keras keras-layer