如何使用给定图像数据集的数据集训练模型,并在单独的 csv 文件中给出该图像的标签?

Imm*_*uel 3 machine-learning

我有一个数据集,其中图像文件是单独给出的,并且该图像文件的标签在单独的 csv 文件中给出,其中第一列作为图像文件名,第二列作为其各自的标签。

|图像|标签| |123.jpeg|标签名称|

123.jpeg真实图像在另一个文件夹(train)中

如何输入这样的数据集并训练我的机器学习模型,以便我有另一个图像文件夹(测试),其中存在用于测试的图像,并且这些图像名称在另一个单独的 test.csv 中给出,仅包含图像名称

|图像|标签| |13.jpg| ?|

我必须预测哪个图像的标签。如果有人可以用代码结构解释这一点,那么很好理解,因为我是新手。谢谢

小智 5

您必须首先将 csv 文件加载到包含标签的数据框中。

import pandas as pd    
train = pd.read_csv(path_to_train_csv_file)
test = pd.read_csv(path_to_test_csv_file)
Run Code Online (Sandbox Code Playgroud)

这将加载包含 image_name 和分配给它的相应标签的 csv 文件。确保标签名称是字符串,并且测试数据帧不会有任何标签列。

然后定义火车文件夹所在的路径。

train_folder = path_to_train_folder
test_folder = path_to_test_folder
Run Code Online (Sandbox Code Playgroud)

现在您可以使用tensorflow keras api 加载数据。首先定义一个数据生成器

import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Define your data generator
train_gen = ImageDataGenerator(
rotation_range=45,
rescale=1./255,
horizontal_flip=True
)
test_gen = ImageDataGenerator(rescale = 1.255)
Run Code Online (Sandbox Code Playgroud)

请注意,测试生成器仅进行缩放,不会进行任何增强,而在训练生成器中,正在应用水平翻转和旋转范围等增强技术。

创建数据生成器后,我们必须获取数据

train_data = train_gen.flow_from_dataframe(dataframe = train, 
directory = train_folder, x_col = name of your column with image, 
y_col = name of column of your labels, seed = 42,
batch_size = size of your batch, shuffle = True, 
class_mode="categorical",target_size = (height of image, width of image))

test_data = test_gen.flow_from_dataframe(dataframe = test, 
directory = test_folder, x_col = name of your column with image, 
y_col = None,
batch_size = size of your batch, shuffle = False, 
class_mode=None,target_size = (height of image, width of image))
Run Code Online (Sandbox Code Playgroud)

请注意,在 test_data 中,y_col 和 class_mode 为 None,因为它未定义且丢失且必须进行预测。

您可以检查它们是否正确加载。

imgs, lbl = next(iter(train_data))
Run Code Online (Sandbox Code Playgroud)

您可以可视化您的 imgs,它是您的一批图像,类似地 lbl 是您的一批标签。

这是加载训练数据和测试数据以进行训练的方式