pytorch-Train-Val-Test划分(下)

本文详细介绍了如何在PyTorch中将数据集划分为训练集、验证集和测试集,通过代码示例展示了随机划分的方法,并讨论了K-fold交叉验证在提高神经网络泛化能力上的应用。
部署运行你感兴趣的模型镜像

pytorch-Train-Val-Test划分(下)

2019-11-17阅读 2860

上半节讲到一个数据集正常需要划分为train、validation和test三个数据集,那么具体到代码中是如何实现的?

需要注意的是正常代码提供的是两种划分,即train和test两部分,我们在划分train的数据集中再划分为两部分,即可设定val数据集。

代码如下

print('train:', len(train_db), 'test:', len(test_db))
# 首先先查看train和test数据集的数量,看看是否满足预订的分配目标
train_db, val_db = torch.utils.data.random_split(train_db, [50000, 10000])
# 随机分配法将数据分为50k和10k的数量
train_loader = torch.utils.data.DataLoader(
    train_db,
    batch_size = batch_size, shuffle=True)
# 将数据喂给Loader中
val_loader = torch.utils.data.DataLoader(
    val_db,
    batch_size = batch_size, shuffle=True)

那么这种划分方式也会有一些问题,如下图,假设我们得到的总数据量为70k。

1620uploading.4e448015.gif正在上传…重新上传取消

那么此时test set中的数据是无法使用的,这样便只有50K+10K的数据集可以供给神经网络学习,而还有10K的val数据集无法用于backward。因此为增加数据量,使函数模型更准确,我们使用K-fold cross-validation法,将这60K数据重新随机划分出50K的train set和10K的Val set。如下图所示

1620uploading.4e448015.gif正在上传…重新上传取消

这样白色部分为新划分的Val set,两个黄色部分加一块为Train set。

依次类似,每进行一次epoch,便将新的数据喂给了train set。这样做的好处是使得数据集中的每一个数据都有可能加入到train set中,防止神经网络对相同的数据产生一个记忆特性。

叫K-fold cross-validation的原因在于

假设有60K的train+val数据集可供使用,分成了N份。

每次取N-1/N份用来做train,另外1/N份用来做validation,

这种方式总的来说对神经网络的提升不会很大。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值