Keras卷积自动编码器空白输出

时间:2018-11-30 04:25:40

标签: python keras conv-neural-network autoencoder

快速免责声明:我对Keras,机器学习和编程领域还很陌生。

我正在尝试为(当前)单个图像创建基本的自动编码器。虽然看起来运行良好,但输出只是白色图像。这就是我所拥有的:

img_height, img_width = 128, 128

input_img = '4.jpg'
output_img = '5.jpg'

# load image
x = load_img(input_img)
x = img_to_array(x)  # array with shape (128, 128, 3)
x = x.reshape((1,) + x.shape)  # array with shape (1, 128, 128, 3)

# define input shape
input_shape = (img_height, img_width, 3)

model = Sequential()
# encoding
model.add(Conv2D(128, (3, 3), activation='relu', input_shape=input_shape, 
padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))

# decoding
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(3, (3, 3), activation='sigmoid', padding='same'))

model.compile(loss='binary_crossentropy', optimizer='adam')
print(model.summary())

checkpoint = ModelCheckpoint("autoencoder-loss-{loss:.4f}.hdf5", monitor='loss', verbose=0, save_best_only=True, mode='min') 
model.fit(x, x, epochs=10, batch_size=1, verbose=1, callbacks=[checkpoint])

y = model.predict(x)

y = y[0, :, :, :]
y = array_to_img(y)
save_img(output_img, y)

我查看了一些教程以供参考,但是我仍然无法弄清问题所在。

任何指导/建议/帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

this解决了该问题。代码只是丢失了

x = x.astype('float32') / 255.

这是一个numpy内置函数,用于将该向量中包含的值转换为浮点数。

这使我们可以获取十进制值,其中的值除以255。RGB值存储为8位整数,因此我们将向量中的值除以255(2 ^ 8-1),以表示颜色在0.0到1.0之间的十进制值。

相关问题