当前位置: 代码迷 >> 综合 >> 为什么cnn的network训练时用batch_size随机批量梯度下降训练,而预测时可以接受只有一张图片的输入呢?
  详细解决方案

为什么cnn的network训练时用batch_size随机批量梯度下降训练,而预测时可以接受只有一张图片的输入呢?

热度:44   发布时间:2023-10-17 22:30:46.0

在批量梯度下降中,权重的更新公式是:w = w + delta(w),  而delta(w) =  -eta * delta(J(w)), 其中eta为学习率,delta(J(w))为所有样本的损失函数计算出来的梯度,注意,是所有样本,也就是批量梯度下降是要等到所有样本的梯度都计算出来后再加起来更新参数,这样,当整个数据集很大的时候,就不适用,而随机梯度下降就是让delta(J(w))为随机的单个的样本的损失函数梯度,也称为在线学习,这样梯度更新快,但是效率低,而随机批量梯度下降就是选择一个小批量来代替全样本,也就是delta(J(w))只是某个批量的损失函数梯度;

在cnn中,一般会把样本切分为多个批量,然后输入定义好的网络,输入的shape可能是(256,3,112,112)也就是批量是256张图片,通道数是3(也就是彩色图片),图片的长和宽是112x112,那么,定义好的卷积层会对这256个批量同时做forward,得出output再反向传播计算误差和梯度,再更新参数,注意,这时的学习率eta应该是定义好的eta除以batch_size,当训练出了适当的参数后,就可以停止训练,这时,我们有一张图片要做预测,图片的shape为(3,112,112),我们用numpy的expand_dim函数,将输入图片扩展为(1,3,112,112),再输入网络,即可得到output,其实,网络的参数只是适应图片的尺寸而已,batch_size是可以调的,可以是1,也可以是2,也可以是256,都可以output相应的东西。

  相关解决方案