用相同的图像训练自动编码器
Training the autoencoder with identical images
我正在用 2000 张相同 图像训练自动编码器。我的期望是,如果自动编码器有足够的容量,损失将接近 0,并且在一定的训练时间后准确度将接近 1。相反,我看到快速收敛到损失 = 0.07 和准确度 = 0.76。减少卷积层的数量带来了一些改进。减少每层的内核数量会增加损失。之后没有任何改善。我的期望错了吗?还是我的自动编码器架构有问题?可以做些什么来制作几乎无损的自动编码器?
input_img = Input(shape=(image_size_x, image_size_y, 1))
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
谢谢!
您需要在自卷积编码器和自卷积解码器之间添加一个密集层。这就是潜在的表示,也称为嵌入层。这是压缩图像的层。这就是架构试图 "learn".
的 "compressed knowledge"
关于实施,来自本教程:https://www.tensorflow.org/tutorials/generative/cvae
我建议您在编码器和解码器部分之间添加这些行:
x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dense(latent_dim + latent_dim)
我正在用 2000 张相同 图像训练自动编码器。我的期望是,如果自动编码器有足够的容量,损失将接近 0,并且在一定的训练时间后准确度将接近 1。相反,我看到快速收敛到损失 = 0.07 和准确度 = 0.76。减少卷积层的数量带来了一些改进。减少每层的内核数量会增加损失。之后没有任何改善。我的期望错了吗?还是我的自动编码器架构有问题?可以做些什么来制作几乎无损的自动编码器?
input_img = Input(shape=(image_size_x, image_size_y, 1))
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
谢谢!
您需要在自卷积编码器和自卷积解码器之间添加一个密集层。这就是潜在的表示,也称为嵌入层。这是压缩图像的层。这就是架构试图 "learn".
的 "compressed knowledge"关于实施,来自本教程:https://www.tensorflow.org/tutorials/generative/cvae 我建议您在编码器和解码器部分之间添加这些行:
x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dense(latent_dim + latent_dim)