Keras 卷积自动编码器空白输出
Keras Convolutional Autoencoder blank output
快速免责声明:我对 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)
我看了一些教程作为参考,但我仍然无法弄清楚我的问题是什么。
任何 guidance/suggestions/help 将不胜感激。
谢谢!
this 解决了问题。代码刚刚丢失
x = x.astype('float32') / 255.
这是一个 numpy 内置函数,用于将该向量中包含的值转换为浮点数。
这允许我们得到十进制值,其中值除以 255。RGB 值存储为 8 位整数,因此我们将向量中的值除以 255 (2^8 - 1),以表示颜色为 0.0 到 1.0 之间的十进制值。
快速免责声明:我对 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)
我看了一些教程作为参考,但我仍然无法弄清楚我的问题是什么。
任何 guidance/suggestions/help 将不胜感激。
谢谢!
this 解决了问题。代码刚刚丢失
x = x.astype('float32') / 255.
这是一个 numpy 内置函数,用于将该向量中包含的值转换为浮点数。
这允许我们得到十进制值,其中值除以 255。RGB 值存储为 8 位整数,因此我们将向量中的值除以 255 (2^8 - 1),以表示颜色为 0.0 到 1.0 之间的十进制值。