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

将TensorFlow数据集拆分为训练/验证/测试集会导致数据泄露吗?

关于TensorFlow数据集拆分与数据泄露的问题

你的判断有一定道理,但得结合具体情况来看:

  • 核心关键点在于shuffle=True是否搭配了固定的seed参数:
    • 如果没指定seed,每次对数据集ds发起新的遍历(比如调用take、skip),都会重新生成随机打乱的顺序。这时候train_ds = ds.take(8)是第一次打乱后的前8个batch,val_ds = ds.skip(8).take(1)是第二次重新打乱后的第9个batch,test_ds则是第三次打乱后的后续内容——三个数据集必然会出现数据重叠,也就是训练集的数据出现在验证/测试集里,确实存在数据泄露。
    • 如果创建数据集时给shuffle=True搭配了固定seed(比如shuffle=True, seed=42),每次遍历ds时的打乱顺序会完全固定。这时候take和skip都是基于同一个固定打乱后的序列,三个数据集的batch不会重叠,也就不存在数据泄露。

不过更稳妥的拆分方式是先固定基础数据集的顺序,再拆分并按需打乱:

ds = tf.keras.preprocessing.image_dataset_from_directory('/content/data',
                                                         labels='inferred',
                                                         label_mode='int',
                                                         batch_size=32,
                                                         image_size=(256, 256),
                                                         shuffle=False)
# 按8:1:1比例拆分
train_size = int(0.8 * len(ds))
val_size = int(0.1 * len(ds))
test_size = len(ds) - train_size - val_size

train_ds = ds.take(train_size).shuffle(1000, seed=42)
val_ds = ds.skip(train_size).take(val_size)
test_ds = ds.skip(train_size + val_size)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:46