【发布时间】:2019-06-21 17:06:26
【问题描述】:
我在理解我的模型的行为时遇到了很多麻烦,需要一些帮助才能弄清楚。
假设这个 Autoencoder 由所有卷积层组成:
initializer = he_uniform()
#Input
input_tensor_a = Input(shape=(128,128,3))
#Encoder
conv1 = Conv2D(64, kernel_size=7, padding='same', kernel_initializer=initializer)(input_tensor_a)
bn1 = BatchNormalization()(conv1)
relu1 = Activation('relu')(bn1)
conv2 = Conv2D(128, kernel_size=3, strides=2, padding='same', kernel_initializer=initializer)(relu1)
bn2 = BatchNormalization()(conv2)
relu2 = Activation('relu')(bn2)
conv3 = Conv2D(256, kernel_size=3, strides=2, padding='same', kernel_initializer=initializer)(relu2)
bn3 = BatchNormalization()(conv3)
relu3 = Activation('relu')(bn3)
conv4 = Conv2D(512, kernel_size=3, strides=2, padding='same', kernel_initializer=initializer)(relu3)
bn4 = BatchNormalization()(conv4)
relu4 = Activation('relu')(bn4)
#Decoder
ups1 = UpSampling2D(size=(2,2))(relu4)
up_conv1 = Conv2D(256, kernel_size=3, padding='same', kernel_initializer=initializer)(ups1)
bn5 = BatchNormalization()(up_conv1)
relu5 = Activation('relu')(bn5)
ups2 = UpSampling2D(size=(2,2))(relu5)
up_conv2 = Conv2D(128, kernel_size=3, padding='same', kernel_initializer=initializer)(ups2)
bn6 = BatchNormalization()(up_conv2)
relu6 = Activation('relu')(bn6)
ups3 = UpSampling2D(size=(2,2))(relu6)
up_conv3 = Conv2D(64, kernel_size=3, padding='same', kernel_initializer=initializer)(ups3)
bn7 = BatchNormalization()(up_conv3)
relu7 = Activation('relu')(bn7)
up_conv4 = Conv2D(3, kernel_size=7, padding='same', activation='tanh', kernel_initializer=glorot_uniform())(relu7)
optimizer = Adam(0.00001)
#loss is mean_squared_error
我知道这种架构可能不是很好,但我只是想了解它的行为。
以下情况不断发生:
(我没有足够的声誉直接发布图片)
这是输入图片:
(https://i.imgur.com/d2B9vfJ.png)
这是前 5 个 epoch 之后的图像:
(https://i.imgur.com/WHKjdxo.png)
现在又过了几个时代:
(https://i.imgur.com/zxoa7zW.png)
如您所见,模型将输出图像越来越远地推送到空白图像,直到最后它将成为全白的空白图像。
损失从 25000 左右开始,然后会非常缓慢地减少,直到 24000 左右,然后卡在那里(这可能是空白图像状态)
我尝试了不同的学习率,切换 bn 和 relu 层,与“mse”不同的损失函数,有和没有 kernel_initializer,但没有任何帮助。
所以我认为它与架构有关,但我不明白为什么。
如果有人能给我一个很好的解释,我将非常感激。
【问题讨论】:
标签: python image keras convolution autoencoder