You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TensorFlow实现离散图像数据集按文件名规则配对并生成zip数据集

TensorFlow 数据集配对调整方案

你的问题核心是tf.data.Dataset.zip默认会对两个数据集按元素顺序一一配对,最终长度取两个数据集的最小长度,不符合你单个X数据集元素对应2个Y数据集元素的需求,可通过以下两种方案调整代码:

方案一:依赖文件名排序实现(简单高效)

适合确认Y目录下文件名严格按1_1.png、1_2.png、2_1.png、2_2.png...顺序排列的场景:

import os
import tensorflow as tf

# 显式获取文件路径并排序,避免默认排序逻辑不符合预期
x_files = sorted(tf.io.gfile.glob('D:/test/clear/*.png'))
y_files = sorted(tf.io.gfile.glob('D:/test/haze/*.png'))

# 构造X数据集:每个文件名重复2次,总长度和Y数据集一致为6
X = tf.data.Dataset.from_tensor_slices(x_files).flat_map(
    lambda x: tf.data.Dataset.from_tensors(x).repeat(2)
)
# 构造Y数据集
Y = tf.data.Dataset.from_tensor_slices(y_files)

# 配对
paired = tf.data.Dataset.zip((X, Y))

# 测试输出
for x, y in paired:
    print((x, y))

方案二:基于文件名前缀匹配实现(容错性高)

不依赖文件排序,只要文件名符合命名规则即可正确配对,避免Y目录文件顺序错乱导致配对错误:

import os
import tensorflow as tf

x_files = tf.io.gfile.glob('D:/test/clear/*.png')
y_files = tf.io.gfile.glob('D:/test/haze/*.png')

# 构建Y文件的前缀映射表
y_prefix_map = {}
for y_path in y_files:
    y_filename = os.path.basename(y_path)
    prefix = y_filename.split('_')[0]
    y_prefix_map.setdefault(prefix, []).append(y_path)

# 直接生成配对列表
paired_data = []
for x_path in x_files:
    x_filename = os.path.basename(x_path)
    prefix = x_filename.split('.')[0]
    # 每个X匹配对应前缀的两个Y文件
    for y_path in y_prefix_map[prefix]:
        paired_data.append((x_path, y_path))

# 构造最终数据集
paired = tf.data.Dataset.from_tensor_slices(paired_data)

# 测试输出
for x, y in paired:
    print((x, y))

内容的提问来源于stack exchange,提问作者Han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:03