训练神经网络中的基本概念之epoch batch iteration
-
引言
- epochs : 当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch
- batch :当一个 epoch 对于计算机而言太庞大的时候,就需要把它分成多个小块,每个块称为一个batch;在不能将数据一 次性通过神经网络的时候,就需要将数据集分成几个 batch
- batch size : 批大小,一个 batch 中的样本总数,和 number of batches 是不同的
- iterations : 是 batch 需要完成一个 epoch 的次数。在一个 epoch 中,batch 数和迭代数是相等的
- iterations = epochs×(images / batch_size)
需要有 Batch_Size原因 :
batchsize 的正确选择是为了在内存效率和内存容量之间寻找最佳平衡
使用多个 epoch 原因:
在神经网络中传递完整的数据集一次是不够的,需要将完整的数据集在同样的神经网络中传递多次。因为我们使用的是有限的数据集,并且使用一个迭代过程即梯度下降,优化学习过程和图示
因此仅仅更新权重一次或者说使用一个 epoch 是不够的,随着 epoch 数量增加,神经网络中的权重的更新次数也增加,曲线从欠拟合变得过拟合,
-
示例
mnist 数据集有 60000 张图片作为训练数据,10000 张图片作为测试数据 Batch Size = 100
- 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的 Batch 个数: 60000/100=600(无法整除,要加1,例:50000/256=195+1=196)
- 每个 Epoch 需要完成的 Batch 个数: 600
- 每个 Epoch 具有的 Iteration 个数: 600(完成一个Batch,相当于参数迭代一次)
- 每个 Epoch 中发生模型权重更新的次数:600
- 训练 10 个Epoch后,模型权重更新的次数: 600*10=6000
- 总共完成30000次迭代,相当于完成了 30000/600=50 个Epoch
不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的60000图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小
剧中人: 怎么查看训练集标签的名称呢?
平平淡淡普普通通的一人: 想问博主为啥换赛道了呀,换成什么方向了?
WJ_MeiMei: 理论是可行的,解决办法不记得了,换赛道了,几年没搞深度学习了
JIENANYA: 博主,想请问一下在pycharm中使用torch框架是否可行? 因为我在安装pytorch框架时跟着一些博主分享的步骤、命令走之后只成功得到了torch框架(而不是我想要的pytorch)。我也不太懂是哪个环节出了问题 当我在Pycharm中使用了torch方法时: [code=python] import torch print(torch.__version__) print(torch.version.cuda) print(torch.backends.cudnn.version()) print(torch.cuda.is_available()) # cuda是否可用; print(torch.cuda.device_count()) # 返回gpu数量; print(torch.cuda.get_device_name(0)) # 返回gpu名字,设备索引默认从0开始; print(torch.cuda.current_device()) # 返回当前设备索引 [/code] 这串代码,都能运行成功。但是看到您这篇文章写的说是pytorch、torch两者编程语言、依赖库、模型和中间变量关系不同。所以我想问在pycharm中调用torch库会不会对普通(普遍的)项目的运行上有很多限制。(比如:联邦学习)
dr_xxy: 请问那个安装命令是在哪个界面输入啊