首页 > 解决方案 > 如何使用 keras 加载图像数据进行回归?

问题描述

我现在已经阅读了几个教程,这些教程提供了如何导入图像以使用 Keras 进行分类的说明。据我所知,所有教程都只是描述一个多类场景(例如猫/狗类。)。这些方法不适用于我的问题。

我想做一个回归,将图像作为输入并返回图像作为输出。我的问题:如果没有分类而是回归,我如何轻松地将图像数据传递给 Keras?

对于每对给定的输入和输出训练数据,我无法从以下位置轻松导入:

├── input_data
│   ├── input0.png
|   ├── input1.png
|   └── ...
└── output_data
    ├── output0.png
    ├── output1.png
    └── ...

至此:

x_train, x_valid, y_train, y_valid = train_test_split(inputs, outputs, test_size=0.2, shuffle= True)

我已经尝试过的:

  1. Keras flow_from_directory方法看起来几乎完美,并提供了很好的功能,但它仅适用于在子目录中排序的分类数据。

  2. 其次,Tensorflow 提供了这个图像导入功能。

    from keras.preprocessing.image import img_to_array, load_img
    img = load_img('img.png') 
    x = img_to_array(img)
    

据我所知,这也是直截了当的,只能打开单个图像而不是整个目录。如果遍历整个目录,这可能会有所帮助,但由于 Keras 具有那些很好的预处理功能,我很想知道是否有类似 keras 的方式。所以我的问题:

有没有什么合适的方法可以导入大型图像数据集进行回归?

标签: pythontensorflowmachine-learningkeras

解决方案


据我所知,没有将所有图像作为数据集Keras加载的特定功能。但是,您可以通过使用和的组合来完成此操作,类似以下内容会一次性将所有图像加载到列表中:os.walk()Image.open()

import os
from PIL import Image  # or you can use the keras one to load images
def load_dataset(top_dir="input_data"):
    images_dataset = []
    for root, dirs, files in os.walk(top_dir):
        for name in files:
            # print(os.path.join(root, name))
            img = np.array(Image.open(os.path.join(root, name)))
            images_dataset.append(img)
    return images_dataset

推荐阅读