TensorFlow 使用 image_dataset_from_directory 加载图像

我在使用 image_dataset_from_directory 创建 tf.data.Dataset 时遇到了一些问题,用于一对一任务。这意味着我将给模型输入一张图像,输出将是另一张图像。

我的数据集目录结构如下:

Dataset/...input/......a_image_1.jpg......a_image_2.jpg...output/......a_image_1.jpg......a_image_2.jpg

在数据集目录中,对应的输入图像和目标图像具有相同的名称。我尝试以以下方式加载数据集:

dataset_url = "Project/Dataset"input_size= 300batch_size = 8train_ds = image_dataset_from_directory(    dataset_url,    labels='inferred',    batch_size=batch_size,    image_size=(input_size, input_size),    validation_split=0.2,    subset="training",    seed=1337,    label_mode='int',)valid_ds = image_dataset_from_directory(    dataset_url,    labels='inferred',    batch_size=batch_size,    image_size=(input_size, input_size),    validation_split=0.2,    subset="validation",    seed=1337,    label_mode='int',)

这个过程将两个文件夹中的所有图像加载为类别1和2。现在我该如何将这两个类别映射为 inputtarget?我走在正确的轨道上吗?还有其他方法吗?


回答:

创建一个名为 data 的目录。在 data 目录内创建两个子目录 image 和 target。在 image 目录中放置你的图像。在 target 目录中放置你的目标图像。确保你的图像和目标图像具有完全相同的文件名。这是必要的,以便在获取一批图像时,其对应的目标图像能以相同的顺序获取。我使用 ImageDataGenerator.flow_from_directory 如下所示:

image_dir=r'c:\data\image'target_dirr'c:\data\target'target_size=(224,224) # 将此设置为你想要的目标尺寸channels=3 # 对于彩色图像color_mode='rgb'shuffle=True,seed=123class_mode=Nonebatch_size=10 # 将此设置为所需的批量大小vsplit=.2 # 将此设置为验证集分割比例gen=ImageDataGenerator(rescale=1/255, validation_split=vsplit)image_gen=gen.flow_from_directory(img_dir, target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed,                                batch_size=batch_size, subset='training')valid_image_gen=gen.flow_from_directory(img_dir, target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed,                                batch_size=batch_size, subset='validation')target_gen=gen.flow_from_directory(target_dir,target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed,                                batch_size=batch_size, subset='training') valid_target_gen=gen.flow_from_directory(target_dir,target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed,                                batch_size=batch_size, subset='validation') composite_gen=zip(image_gen, target_gen)valid_gen=zip(valid_image_gen, valid_target_gen)

composite_gen 将生成 (图像, 目标图像) 的元组。要测试它

images, targets=next(composite_gen)print (images.shape, targets.shape)img1= images[0]target1=targets[0]# 显示这两张图像以确保图像和目标按要求匹配plt.subplot(1,2,1)plt.imshow(img1)plt.subplot(1,2,2)plt.imshow(target1)

你可以对 valid_gen 运行相同的测试。然后使用 composite_gen 和 valid_gen 作为 model.fit 的输入

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注