首页 > 解决方案 > 如何在回归问题中从 CNN 输出 float32 图像?

问题描述

我一直在研究输入和标签是图像的回归问题。我目前正在对 float32 中的输入和标签使用灰度图像。标签图像包含 0-650 之间的连续值。该数据集包括 11250 张 32x32 图像。

经过这个分析,我将替换RGB输入而不是灰度,但现在我使用灰度作为输入。

我已经在 Keras 中测试了 VGG16 架构。在拟合模型并输出预测图像后,它们是 0-255 数据范围内的 8Bit 格式。

如何使 float32 格式的预测图像接近初始数据集的数据范围(0-650)?


我添加了一些相关代码:

batch_size = 32
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=None)
 
img_train_generator = train_datagen.flow_from_directory(
                "train/image/",
                target_size=(32,32),
                batch_size=batch_size,
                class_mode= None,
                color_mode='grayscale',
                shuffle=False)
                   
label_train_generator = train_datagen.flow_from_directory(
                "train/label/",
                target_size=(32,32),
                batch_size=batch_size,
                class_mode=None,
                shuffle=False,
                color_mode='grayscale')

train_generator = zip(img_train_generator, label_train_generator)

X_train, y_train=next(train_generator)
X_train.shape, y_train.shape

验证和测试生成器与训练生成器类似,但数据不同。

outputs = tf.keras.layers.Conv2D(1, (1, 1), activation='linear')(c9)
model = tf.keras.Model(inputs=[inputs], outputs=[outputs])
model.compile(optimizer='ADAM', loss='mean_squared_error', metrics=['mae'])

history = model.fit(
    train_generator,
    steps_per_epoch=train_steps,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=valid_steps)

pred= model.predict(X_test)

for i, image in enumerate(pred, 1):
    tf.keras.preprocessing.image.save_img(f'pred_float32/{i}.png', image,scale=False)

标签: tensorflowmachine-learningneural-networkregressionconv-neural-network

解决方案


推荐阅读