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

未指定划分比例时,PyTorch是否会自动随机划分数据?

PyTorch是否会自动随机划分数据?

核心结论

PyTorch不会自动随机划分训练/验证/测试集,所有数据划分逻辑都需要你手动实现。

原因说明

PyTorch里的Dataset和DataLoader这两个核心数据组件,只负责完成数据加载、预处理和批量采样的工作,本身没有内置自动拆分数据集的功能。如果你的代码里没写划分逻辑,程序会直接用全部50万条数据来训练,不会自动拆分出验证或测试集。

针对你的Autoencoder场景分析

你提到论文代码没写划分逻辑,大概率是这两种情况:

  • 论文直接用全量数据训练:Autoencoder属于无监督学习,有些场景下不需要单独的验证/测试集,或者作者在训练过程中用了其他方式做验证(比如从训练集里临时抽样本)但没在公开代码里体现。
  • 你需要自己添加划分:如果要评估模型的泛化能力,建议手动划分训练集和验证集,PyTorch提供了random_split工具可以快速实现。

手动划分的简单示例代码

import pandas as pd
from torch.utils.data import Dataset, DataLoader, random_split

# 加载无标签CSV数据
df = pd.read_csv("your_dataset.csv")

# 自定义适配Autoencoder的Dataset
class AE_Dataset(Dataset):
    def __init__(self, data):
        self.data = data.values.astype('float32')
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        # Autoencoder的输入和输出都是同一份数据
        return self.data[idx]

# 生成完整数据集
full_dataset = AE_Dataset(df)

# 按9:1比例划分训练集和验证集
train_size = int(0.9 * len(full_dataset))
val_size = len(full_dataset) - train_size
train_dataset, val_dataset = random_split(full_dataset, [train_size, val_size])

# 创建DataLoader用于训练
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=64, shuffle=False)

额外建议

如果只是复现论文结果,直接用全量数据训练即可;如果需要验证模型的泛化能力或者调参,一定要加上验证集划分逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:22:12