十八、批量规范化和ResNet

这一节的学习中遇到了很多困难,尤其是对批规范化和残差是什么意思很不解。看了多遍后,基本理解其中含义,由于这一节需要一些计算和推理。所以我写在纸上,直接贴图片。

批量规范化

批量规范化(batch normalization)是一种流行且有效的技术,可持续加速深层网络的收敛速度。结合残差块,批量规范化使得研究人员能够训练100层以上的网络。

[简明实现]

除了使用我们刚刚定义的BatchNorm,我们也可以直接使用深度学习框架中定义的BatchNorm。

该代码看起来几乎与我们上面的代码相同。

net = nn.Sequential(
    nn.Conv2d(1, 6, kernel_size=5), nn.BatchNorm2d(6), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.BatchNorm2d(16), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(),
    nn.Linear(256, 120), nn.BatchNorm1d(120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.BatchNorm1d(84), nn.Sigmoid(),
    nn.Linear(84, 10))

下面,我们[使用相同超参数来训练模型]。

请注意,通常高级API变体运行速度快得多,因为它的代码已编译为C++或CUDA,而我们的自定义代码由Python实现。

d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

loss 0.263, train acc 0.902, test acc 0.862

71480.6 examples/sec on cuda:0

小结

  • 批量规范化在全连接层和卷积层的使用略有不同。

  • 批量规范化层和暂退层一样,在训练模式和预测模式下计算不同。

  • 批量规范化有许多有益的副作用,主要是正则化。另一方面,”减少内部协变量偏移“的原始动机似乎不是一个有效的解释。

  • 批量规范化主要是要因为,更深层的神经网络中即使对输入数据做了标准化,但是一个小的变化可以导致很多层后发生很大的变化(梯度爆炸)在靠近输出层会剧烈变化。所以我们可以在利用小批量上对均值和标准差不断调整神经网络对中间输出,使得整个神经网络在各层的中间输出的数值更加稳定。

残差网络(ResNet)

由于在训练过程中添加过多层后训练误差不降反增,即使利用批量归一化后这个问题也存在。针对这个问题残差网络出现。

(残差块)

在残差块中,输入可通过跨层数据线路更快地向前传播。

ResNet如何通过残差来避免梯度消失,使靠近数据层仍然有较好梯度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小常在学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值