训练时出现了这种错误:
RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0;
6.00 GiB total capacity; 4.22 GiB already allocated; 4.91 MiB free; 85.24 MiB cached)
运行时错误:CUDA内存不足。尝试分配20.00 MiB(GPU 0;总容量6.00 GiB;已分配4.22 GiB;4.91 MiB可用;85.24 MiB缓存)
根据报错判断是内存不足引起的,通过修改batch来让他每次处理的数据少一些。
Batch
在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个batch。
BATCH_SIZE
每批数据量的大小。将影响到模型的优化程度和速度。
batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。
相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致拟合程度差。
减小Batch_Size,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
增大Batch_Size
优点:相对处理速度加快,内存利用率提高(所需内存容量增加)。
缺点:要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
epoch全数据集
**中文:**一个时期。即所有训练样本的一个正向传递和一个反向传递。
1个epoch指用训练集中的全部样本训练一次,此时相当于batchsize 等于训练集的样本数。
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。
如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
【overfitting:过拟合;underfitting:欠拟合】
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
iteration
中文: 迭代次数。1个iteration等于使用batchsize个样本训练一次。
BATCH_SIZE与epoch的关系
举个例子,训练集有1000个样本,batchsize=10,那么:训练完整个样本集需要:100次iteration,1次epoch。
参考地址:https://blog.csdn.net/program_developer/article/details/78597738