如何将两个TensorFlow数据集分别作为输入和标签用于模型训练
问题原因
Keras 要求输入为 tf.data.Dataset 类型时,单个数据集需要在每步迭代直接返回 (输入张量, 标签张量) 的二元组,不支持将输入数据、标签数据拆分为两个独立的 Dataset 对象分别传入 x 和 y 参数,这是触发报错的核心原因。
解决方法
你只需要将两个独立的数据集打包合并为一个返回样本-标签对的数据集即可,操作步骤如下:
- 用
tf.data.Dataset.zip()方法对齐两个数据集,自动按位置配对输入和标签:
# 对齐输入数据集和标签数据集,每步返回 (输入图像, 标签图像) train_dataset = tf.data.Dataset.zip((data, labels)) # 可选:添加训练常用优化配置,可根据自身需求调整 train_dataset = train_dataset.shuffle(buffer_size=200).prefetch(tf.data.AUTOTUNE)
- 调用训练方法时仅传入合并后的单个数据集即可,不需要额外传
y参数:
# 注意Keras内置训练方法为fit,若你使用自定义训练方法逻辑也通用 model.fit(train_dataset, epochs=5)
注意事项
- 要确保两个目录下的样本排序后一一对应:
image_dataset_from_directory默认按文件名升序加载样本,只要两个目录下的输入、标签对应文件命名顺序一致即可正常配对,若担心顺序错乱可以在加载数据集时添加参数shuffle=False固定加载顺序。 - 该方法适配任意
batch_size配置,zip操作会自动对齐批次维度,不需要额外调整。
内容的提问来源于stack exchange,提问作者ion g
相关产品推荐
相关产品推荐

