我从一个教程中得到了一个类似于自动编码器的模型。
input_img = layers.Input(shape=(28,28,1))
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(32, (3, 3), activation='relu')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = keras.Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
这将返回输出形状(28,28,1(但是当我使用(512512,1(作为形状输出时,形状是(508508,1(。有人能提供调整输出为(512512,1(的模型的方法吗
尝试在上添加padding='same'
x = layers.Conv2D(32, (3, 3), activation='relu')(x)
完整代码:
input_img = layers.Input(shape=(512,512,1))
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = keras.Model(input_img, decoded)
autoencoder.summary()
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
型号总结:
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 512, 512, 1)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 512, 512, 32) 320
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 256, 256, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 256, 256, 16) 4624
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 128, 128, 16) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 128, 128, 16) 2320
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 64, 64, 16) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 64, 64, 16) 2320
_________________________________________________________________
up_sampling2d (UpSampling2D) (None, 128, 128, 16) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 128, 128, 16) 2320
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 256, 256, 16) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 256, 256, 32) 4640
_________________________________________________________________
up_sampling2d_2 (UpSampling2 (None, 512, 512, 32) 0
_________________________________________________________________
conv2d_6 (Conv2D) (None, 512, 512, 1) 289
=================================================================
Total params: 16,833
Trainable params: 16,833
Non-trainable params: 0