首页 > 解决方案 > keras 中的自动编码器预测每个白色图像

问题描述

我正在制作一个自动编码器,尝试图像重建。输入图像尺寸为 (256,256,3)。这是模型架构:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 256, 256, 3)]     0         
_________________________________________________________________
conv2d (Conv2D)              (None, 256, 256, 12)      156       
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 256, 256, 48)      2352      
_________________________________________________________________
batch_normalization (BatchNo (None, 256, 256, 48)      192       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 256, 256, 12)      2316      
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 256, 256, 12)      588       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 256, 256, 3)       327       
=================================================================
Total params: 5,931
Trainable params: 5,835
Non-trainable params: 96
_________________________________________________________________


它很小,但我已经尝试了多达 5800 万个可训练参数。没什么区别。这些图像是叶子,具有对比鲜明的背景(通常接近白色)。背景通常是图像的 30-50%。损失函数是mse,尝试了binary_crossentropy(大多数博客都使用它,我不明白为什么)和kldivergence。使用 adam,但尝试了 adagrad 和 sgd。我得到了 85-90% 的准确率,但它总是一个白色的图像,或者很少有一些娱乐,但它与原始图像相去甚远。

这是我的模型代码:

original_input = layers.Input(shape=(256,256,3))


encoded = layers.Conv2D(12, (2, 2), activation='relu', padding='same')(original_input)
x = layers.Conv2D(48, (2, 2), activation='relu', padding='same')(encoded)
batch_norm = keras.layers.BatchNormalization()(x)
x = layers.Conv2D(12, (2, 2), activation='relu', padding='same')(batch_norm)
x = layers.Conv2D(12, (2, 2), activation='relu', padding='same')(x)
decoded = layers.Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)

我正在使用 ImageDataGenerator。谁能告诉我我做错了什么?为什么图像没有被重新创建?

请帮忙。谢谢你。

标签: pythontensorflowkerasconv-neural-networkautoencoder

解决方案


推荐阅读