Pytorch每次训练到Epoch1最后出现size不匹配的一个可能原因

本文探讨了在网络训练过程中,由于随机变量生成和数据加载导致的BatchSize不匹配问题。提供了三种解决方案:调整BatchSize、调整数据集大小,或利用DataLoader的drop_last参数。强调了在使用自生成随机变量的网络时,需注意BatchSize与数据集大小的匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:

在网络本身有随机变量的情况下,随机变量很可能是在定义网络时按照预设的batchSzie确定的维度。这样,如果总的训练集的Size不能被batchSize整除,就会出现网络输入数据的Size和生成的随机变量的size在Batchsize那个维度上不匹配的问题,从而报错。

 

解决:

调整BatchSize使其能够整除Size;

调整数据集大小使其能够被BatchSize整除。

检查输入数据的batchsize,当它和预设的batchsize不匹配时强行补齐;

 

总结

之前一直以为在使用dataLoader的时候不会出现这种问题,而且也没有跑过额外产生随机变量的网络。今天首次遇到这个问题。在训练有自生成随机变量的网络时要特别注意该问题。

 

===============2020年10月16日 21:23:23更新==============================================

上述问题应该(没有去试但根据文档应该没问题)可以通过设置dataloader的drop_last 参数去解决,这才应该是标准解法。

drop_last (bool, optional) – set to True to drop the last incomplete batch, if the dataset size is not divisible by the batch size. If False and the size of dataset is not divisible by the batch size, then the last batch will be smaller. (default: False)


参考:https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不再更新,请勿购买!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值