Python Keras卷积自动编码器:层形状
我有一个大约70000张训练图像的列表,每个形状(颜色通道的数量,高度宽度)=(3,30,30)和大约20000张测试图像。我的卷积自动编码器定义为:Python Keras卷积自动编码器:层形状,python,keras,autoencoder,Python,Keras,Autoencoder,我有一个大约70000张训练图像的列表,每个形状(颜色通道的数量,高度宽度)=(3,30,30)和大约20000张测试图像。我的卷积自动编码器定义为: # Same as the code above, but with some params changed # Now let's define the model. # Set input dimensions: input_img = Input(shape=(3, 30, 30)) # Encoder: define a chai
# Same as the code above, but with some params changed
# Now let's define the model.
# Set input dimensions:
input_img = Input(shape=(3, 30, 30))
# Encoder: define a chain of Conv2D and MaxPooling2D layers
x = Convolution2D(128, 3, 3,
activation='relu',
border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(64, 3, 3,
activation='relu',
border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(64, 3, 3,
activation='relu',
border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)
# at this point, the representation is (8, 4, 4) i.e. 128-dimensional
# Decoder: a stack of Conv2D and UpSampling2D layers
x = Convolution2D(64, 3, 3,
activation='relu',
border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(64, 3, 3,
activation='relu',
border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(128, 3, 3,
activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(1, 3, 3,
activation='sigmoid',
border_mode='same')(x)
autoencoder2 = Model(input_img, decoded)
autoencoder2.compile(optimizer='adadelta', loss='mse')
这是来自的自动编码器
它抛出一个错误:
Error when checking model target: expected convolution2d_14 to have shape (None, 1, 28, 28) but got array with shape (76960, 3, 30, 30)
这很奇怪,因为我已经将指定的输入形状更改为(3,30,30)。我缺少一些实现技术吗?您忘记在解码器的最后一个convnet层中添加border_mode='same' 在中,他们忘了添加
'border\u mode='same'
例如,在第二个最后一个卷积层中
x=卷积2d(128,3,3,activation='relu')(x)
您应该将最后一个卷积层的形状从(1,3,3)更改为(3,3,3),如下所示:
decoded = Convolution2D(3, 3, 3,
activation='sigmoid',
border_mode='same')(x)
试试这个答案