如何加载含多回归值的图像数据集用于神经网络训练?
解决flow_from_dataframe加载多回归标签的问题
flow_from_dataframe完全支持加载多个回归值,核心是设置class_mode='raw'参数,同时把多个回归列名以列表形式传给y_col。以下是具体实现步骤:
1. 确认CSV结构
你的annotation.csv需要包含图像文件名和两个回归值列,示例结构如下:
filename,x_cord,y_cord img1.jpg,120.5,340.2 img2.jpg,98.1,276.8 ...
2. 使用flow_from_dataframe生成多标签数据
直接通过指定y_col为两个回归列名,class_mode='raw'来生成包含图像和双回归值的批量数据:
import pandas as pd from tensorflow.keras.preprocessing.image import ImageDataGenerator # 读取标注文件 df = pd.read_csv('annotation.csv') # 初始化数据生成器(可根据需求添加数据增强) datagen = ImageDataGenerator(rescale=1./255) # 生成训练数据生成器 train_gen = datagen.flow_from_dataframe( dataframe=df, directory='./your_image_directory', # 替换为你的图像存储路径 x_col='filename', # 图像文件名对应的列名 y_col=['x_cord', 'y_cord'], # 两个回归值的列名,用列表传入 target_size=(224, 224), # 匹配你的模型输入尺寸 batch_size=32, class_mode='raw', # 关键参数:返回原始数值数组,支持多输出 shuffle=True )
3. 构建适配多回归输出的模型
模型的输出层需要设置为Dense(2),对应两个回归值的预测:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, Flatten, Dense # 示例回归模型(可根据需求修改) model = Sequential([ Conv2D(32, (3,3), activation='relu', input_shape=(224,224,3)), Flatten(), Dense(64, activation='relu'), Dense(2) # 输出2个回归值 ]) # 回归任务用MSE作为损失函数 model.compile(optimizer='adam', loss='mean_squared_error') # 开始训练 model.fit( train_gen, epochs=10, steps_per_epoch=len(df) // train_gen.batch_size )
注意事项
- 确保CSV中的文件名和图像文件夹中的文件名完全一致(包括后缀名)
- 如果需要验证集,同样用
flow_from_dataframe生成,注意设置shuffle=False class_mode='raw'适用于所有需要返回原始数值标签的场景,不止双回归,多回归/多标签都能用
内容的提问来源于stack exchange,提问作者niva naik
相关产品推荐
相关产品推荐

