神经网络中Epoch、Iteration、Batchsize相关理解和说明

				版权声明:本文为博主原创文章,欢迎大家转载,但是要注明我的文章地址。					https://blog.csdn.net/program_developer/article/details/78597738				</div>
							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">
            <p>看了半年论文,对这三个概念总是模棱两可,不是很清楚。所以呢!我就花了半天时间,收集网上写的很好的关于这三个概念的介绍,把他们总结到一起,希望能对大家有帮助!</p><p><br></p><p>batchsize:中文翻译为批大小(批尺寸)。</p><p>简单点说,批量大小将决定我们一次训练的样本数目。</p><p>batch_size将影响到模型的优化程度和速度。</p><p><strong><span style="font-size:18px;">为什么需要有Batch_Size:</span></strong></p><p>batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。</p><p>Batch_Size的取值:</p><p><img src="https://img-blog.csdn.net/20171121222637025" alt=""><br></p><p><span style="color:#000099;"><strong>全批次(蓝色)</strong></span></p><p><span>如果数据集比较小,我们就采用全数据集。全数据集确定的方向能够更好的代表样本总体,从而更准确的朝向极值所在的方向。</span></p><p><span>注:对于大的数据集,我们不能使用全批次,因为会得到更差的结果。</span></p><p><span style="color:#33cc00;">迷你批次(绿色)</span></p><p><span>选择一个适中的Batch_Size值。就是说我们选定一个batch的大小后,将会以batch的大小将数据输入深度学习的网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。</span></p><p><span><span style="color:#ff0000;">随机(Batch_Size等于1的情况)(红色)</span></span></p><p><span>每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。</span></p><h2><a name="t0"></a><span>适当的增加Batch_Size的优点:</span></h2><div><span>1.通过并行化提高内存利用率。</span></div><div><span>2.单次epoch的迭代次数减少,提高运行速度。(单次epoch=(全部训练样本/batchsize)/iteration=1)</span></div><div><span>3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。(看上图便可知晓)</span></div><h2><a name="t1"></a><span>经验总结:</span></h2><div><span>相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致underfitting。</span></div><div><span>增大Batch_Size,相对处理速度加快。</span></div><div><span>增大Batch_Size,所需内存容量增加(epoch的次数需要增加以达到最好的结果)</span></div><div><span>这里我们发现上面两个矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。</span></div><div><span style="color:#cc6600;">再次重申:Batch_Size的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。</span></div><div><br></div><div><br></div><div>iteration:中文翻译为迭代。</div><div><span>迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。</span></div><div><span style="color:#990000;">每一次迭代得到的结果都会被作为下一次迭代的初始值。</span></div><div>一个迭代=一个正向通过+一个反向通过。</div><div><br></div><div><br></div><div>epoch:中文翻译为时期。</div><div>一个时期=所有训练样本的一个正向传递和一个反向传递。</div><div><br></div><div><br></div><div>深度学习中经常看到epoch、iteration和batchsize,下面按照自己的理解说说这三个区别:</div><div>(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;<br>(2)iteration:1个iteration等于使用batchsize个样本训练一次;<br>(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;<br><br>举个例子,训练集有1000个样本,batchsize=10,那么:<br>训练完整个样本集需要:<br>100次iteration,1次epoch。<br></div><div><br></div><p><span style="color:#000099;"><strong>参考链接:http://blog.csdn.net/anshiquanshu/article/details/72630012</strong></span></p><p><span><strong><br></strong></span></p><p><span><strong>------------------------------------------------------华丽的分割线----------------------------------------------------</strong></span></p><h2><a name="t2"></a><span style="color:#000099;"><strong>神经网络训练中,Epoch、Batch Size、和迭代傻傻的分不清?</strong></span></h2><div><span><strong>为了理解这些术语有什么不同,我们需要了解一些关于机器学习的术语,比如梯度下降,帮助我们理解。</strong></span></div><div><span><strong>这里简单的总结梯度下降的含义:</strong></span></div><div><span><strong>梯度下降是一个在机器学习中用于寻找较佳结果(曲线的最小值)的迭代优化算法。</strong></span></div><div><span><strong>梯度的含义是斜率或者斜坡的倾斜度。</strong></span></div><div><span><strong>下降的含义是代价函数的下降。</strong></span></div><div><span><strong>算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。梯度下降的迭代性质能使欠拟合演变成获得对数据的较佳拟合。</strong></span></div><div><span><strong><img src="https://img-blog.csdn.net/20171122110658086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJvZ3JhbV9kZXZlbG9wZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></strong></span></div><div><span><strong>梯度下降中有一个称为学习率的参量。如上图左所示,刚开始学习率较大,因此下降步长更大。随着点的下降,学习率变得越来越小,从而下降步长也变小。同时,代价函数也在减小,或者说代价在减小,有时候也称为损失函数或者损失,两者是一样的。(损失/代价的减小是一个概念)。</strong></span></div><div><span><strong><br></strong></span></div><div><strong>只有在数据很庞大的时候(在机器学习中,数据一般情况下都会很大),我们才需要使用epochs,batch size,iteration这些术语,在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。</strong></div><h2><a name="t3"></a><strong><br>epoch</strong></h2><div><strong>当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch。然而,当一个epoch对于计算机而言太庞大的时候,就需要把它分成多个小块。</strong></div><h2><a name="t4"></a><br>为什么要使用多于一个epoch?</h2><div>在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。<img src="https://img-blog.csdn.net/20171122112111189" alt=""></div><div>随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。</div><div><br></div><h2><a name="t5"></a>那么,问题来了,几个epoch才是合适的呢?</h2><div>不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。但是数据的多样性会影响合适的epoch的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。</div><h2><a name="t6"></a>Batch Size</h2><div>batch size将决定我们一次训练的样本数目。<span style="color:#ff0000;">注意:</span>batch size 和 number of batches是不同的。</div><h2><a name="t7"></a>Batch是什么?</h2><div>在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个batch。</div><h2><a name="t8"></a>Iteration</h2><div>Iteration是batch需要完成一个epoch的次数。</div><h2><a name="t9"></a>举个例子:</h2><div>有一个2000个训练样本的数据集。将2000个样本分成大小为500的batch,那么完成一个epoch需要4个iteration。</div><div><br></div><div><span style="color:#3366ff;">参考地址:</span></div><div><strong><br></strong></div><div>http://www.dataguru.cn/article-12193-1.html<br></div><div>https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9<br></div><p><br></p>            </div>
                  </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值