本文讨论的是不使用dataloader的情况下,怎么解决batchsize不能整除训练数据大小的问题。
方案1,寻找可以整除训练数据大小的batchsize
比如训练数据一共50000万个,每个批次35个数据就不合适,可以设置成50个。
方案2,舍弃不能整除的部分数据
比如,batchsize是50,训练数据总个数是50025,那么就要舍弃最后的25个训练数据。
方案3,增加训练数据
你可以临时再去收集一些数据集,或者在数据不足的批次把数据库中的数据重复利用,扩充数据集。
方案4,不能整除的数据并入下次循环
也就是说基本上每个数据用到的次数是等同的。
方案5,把不能整除的部分也作为一个批次训练
虽然批数据的数量少了,但是依然可以送进网络进行训练。具体做法是,遍历数据集的时候,设置一个计数变量。如果这个变量达到了batchsize的大小,就送到网络进行训练;再或者,如果遍历到了数据集的末尾,也送进网络进行训练。