【深度学习】嘿马深度学习笔记第9篇:卷积神经网络,2.4 BN与神经网络调优【附代码文档】

🏆🏆🏆教程全知识点简介:1.深度学习概述包括深度学习与机器学习区别、深度学习应用场景、深度学习框架介绍、项目演示、开发环境搭建(pycharm安装)。2. TensorFlow基础涵盖TF数据流图、TensorFlow实现加法运算、图与TensorBoard(图结构、图相关操作、默认图、创建图、OP)、张量(张量概念、张量的阶、张量数学运算)、变量OP(创建变量)、增加其他功能(命名空间、模型保存与加载、命令行参数使用)、逻辑回归案例。3. 神经网络基础包括playground使用、多个神经元效果演示、深层神经网络。4. 神经网络与tf.keras。5. 梯度下降算法改进涵盖指数加权平均、动量梯度下降法、RMSProp算法、Adam算法、TensorFlow Adam算法API、学习率衰减、标准化输入、神经网络调优、批标准化。6. 卷积神经网络包括CNN原理、CIFAR类别分类(API使用、步骤分析代码实现缩减版LeNet)、卷积神经网络学习特征可视化。7. 经典分类网络结构涵盖LeNet解析、AlexNet、卷积网络结构优化、Inception结构、pre_trained模型VGG预测(VGG模型使用、步骤代码)。8. CNN网络实战技巧。9. 迁移学习案例包括基于VGG的五种图片类别识别迁移学习(数据集迁移需求、思路步骤、训练时读取本地图片类别、特征图平均值输出替代全连接层)。10. 目标检测包括目标检测任务描述、目标定位实现思路、产品物体检测项目介绍、R-CNN(Overfeat模型、SPPNet)、Faster R-CNN(RPN原理)、YOLO(单元格grid cell、非最大抑制NMS、训练)、SSD。11. 产品检测数据集训练涵盖标注数据读取存储(xml读取本地文件存储pkl、解析结构、one_hot编码函数)、训练(案例训练结果、多GPU训练代码修改)、本地预测测试(预测代码)、模型导出(keras模型TensorFlow导出)。12. 模型部署包括Web与模型服务对接逻辑、Docker部署环境、TF Serving与Web开启服务(安装Tensorflow Serving、commodity模型服务运行)、TensorFlow Client对接模型服务、Web Server开启。

📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/457511 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/457511 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/453476 中查看
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
卷积神经网络
2.4 BN与神经网络调优
学习目标
-
目标
-
知道常用的一些神经网络超参数
-
知道BN层的意义以及数学原理
-
应用
-
无
2.4.1 神经网络调优
经常会涉及到参数的调优,也称之为超参数调优。目前 从第二部分中讲过的超参数有
-
算法层面:
-
学习率α\alphaα
-
β1,β2,ϵ\beta1,\beta2, \epsilonβ1,β2,ϵ10−810^{-8}10−8
-
λ\lambdaλ
-
网络层面:
-
hidden units:各隐藏层神经元个数
- layers:神经网络层数
2.4.1.1 调参技巧
对于调参,通常采用跟机器学习中介绍的网格搜索一致,让所有参数的可能组合在一起,得到N组结果。然后去测试每一组的效果去选择。
假设 现在有两个参数
α\alphaαβ\betaβ
这样会有9种组合,[0.1, 0.8], [0.1, 0.88], [0.1, 0.9]…….
-
合理的参数设置
-
学习率α\alphaα
- 算法参数β\betaβ
注:而指数移动平均值参数:β 从 0.9 (相当于近10天的影响)增加到 0.9005 对结果(1/(1-β))几乎没有影响,而 β 从 0.999 到 0.9995 对结果的影响会较大,因为是指数级增加。通过介绍过的式子理解S100=0.1Y100+0.1∗0.9Y99+0.1∗(0.9)2Y98+...S_{100} = 0.1Y_{100} + 0.1 * 0.9Y_{99} + 0.1 * {(0.9)}^2Y_{98} + ...S100=0.1Y100+0.1∗0.9Y99+0.1∗(0.9)2Y98+...
2.4.1.2 运行
通常 有这么多参数组合,每一个组合运行训练都需要很长时间,但是如果资源允许的话,可以同时并行的训练多个参数模型,并观察效果。如果资源不允许的话,还是得一个模型一个模型的运行,并时刻观察损失的变化
所以对于这么多的超参数,调优是一件复杂的事情,怎么让这么多的超参数范围,工作效果还能达到更好,训练变得更容易呢?
2.4.2 批标准化(Batch Normalization)
Batch Normalization论文地址:[
其中最开头介绍是这样的:
训练深度神经网络很复杂,因为在训练期间每层输入的分布发生变化,因为前一层的参数发生了变化。这通过要求较低的学
习率和仔细的参数初始化来减慢训练速度,并且使得训练具有饱和非线性的模型变得非常困难。 将这种现象称为** 内部协
变量偏移** ,并通过 **标准化层** 输入来解决问题。 的方法的优势在于使标准化成为模型体系结构的一部分,并为每
个培训小批量执行标准化。批量标准化允许 使用更高的学习率并且不太关心初始化。它还可以充当调节器,在某些情况
下可以消除对Dropout的需求。应用于最先进的图像分类模型,批量标准化实现了相同的精度,培训步骤减少了14倍,并
且显着地超过了原始模型。使用批量标准化网络的集合, 改进了ImageNet分类的最佳发布结果:达到4.9%的前5个
验证错误(和4.8%的测试错误),超出了人类评估者的准确性。
首先 还是回到之前, 对输入特征 X 使用了标准化处理。标准化化后的优化得到了加速。
对于深层网络呢? 接下来看一下这个公式,这是向量的表示。表示每Mini-batch有m个样本。
- m个样本的向量表示
Z[L]=W[L]A[L−1]+b[L]Z^{[L]} = W^{[L]}A^{[L-1]}+b^{[L]}Z[L]=W[L]A[L−1]+b[L]
A[L]=g[L]A^{[L]}=g^{[L]}(Z^{[L]})A[L]=g[L](Z[L])
输入A[L−1]A^{[L-1]}A[L−1]A[L]A^{[L]}A[L]
深层网络当中不止是初始的特征输入,而到了隐藏层也有输出结果,所以 是否能够对隐层的输入Z[L]Z^{[L]}Z[L]A[L]A^{[L]}A[L]
2.4.2.1 批标准化公式
所以假设对于上图第二个四个神经元隐层。记做Z[l]Z^{[l]}Z[l]z[i][l]z^{[l]}_{[i]}z[i][l]lll
μ=1m∑iz(i)\mu = \frac{1}{m} \sum_i z^{(i)}μ=m1∑iz(i)
σ2=1m∑i(zi−μ)2\sigma^2 = \frac{1}{m} \sum_i {(z_i - \mu)}^2σ2=m1∑i(zi−μ)2
znorm(i)=z(i)−μσ2+ϵz_{norm}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}}znorm(i)=√σ2+ϵz(i)−μ
其中ϵ\epsilonϵ10−810^{-8}10−8z[i][l]z^{[l]}_{[i]}z[i][l]
z~(i)=γznorm(i)+β\tilde z^{(i)} = \gamma z^{(i)}_{norm} + \betaz~(i)=γznorm(i)+β
其中,γ\gammaγβ\betaβ
- 为什么要使用这样两个参数
如果各隐藏层的输入均值在靠近0的区域,即处于激活函数的线性区域,不利于训练非线性神经网络,从而得到效果较差的模型。因此,需要用 γ 和 β 对标准化后的结果做进一步处理。
2.4.2.2 过程图
每一层中都会有两个参数β,γ\beta, \gammaβ,γ
注:原论文的公式图
2.4.2.2 为什么批标准化能够是优化过程变得简单
之前在原文中标记了一个问题叫做叫做"internal covariate shift"。这个词翻译叫做协变量偏移,但是并不是很好理解。那么有一个解释叫做 在网络当中数据的分布会随着不同数据集改变 。这是网络中存在的问题。那 一起来看一下数据本身分布是在这里会有什么问题。
也就是说如果 在训练集中的数据分布如左图,那么网络当中学习到的分布状况也就是左图。那对于给定一个测试集中的数据,分布不一样。这个网络可能就不能准确去区分。这种情况下,一般要对模型进行重新训练。
Batch Normalization的作用就是减小Internal Covariate Shift 所带来的影响,让模型变得更加健壮,鲁棒性(Robustness)更强。即使输入的值改变了,由于 Batch Normalization 的作用,使得均值和方差保持固定(由每一层γ\gammaγβ\betaβ
2.4.2.3 BN总结
Batch Normalization 也起到微弱的正则化效果,但是不要将 Batch Normalization 作为正则化的手段,而是当作加速学习的方式。Batch Normalization主要解决的还是反向传播过程中的梯度问题(梯度消失和爆炸)。
2.4.3 总结
- 掌握基本的超参数以及调参技巧
- 掌握BN的原理以及作用
卷积神经网络
2.4 经典分类网络结构
学习目标
-
目标
-
知道LeNet-5网络结构
- 了解经典的分类网络结构
-
知道一些常见的卷机网络结构的优化
- 知道NIN中1x1卷积原理以及作用
- 知道Inception的作用
-
了解卷积神经网络学习过程内容
-
应用
-
无
下面 主要以一些常见的网络结构去解析,并介绍大部分的网络的特点。这里看一下卷积的发展历史图。
[Python 官方文档]
2.4.1 LeNet-5解析
首先 从一个稍微早一些的卷积网络结构LeNet-5(这里稍微改了下名字),开始的目的是用来识别数字的。从前往后介绍完整的结构组成,并计算相关输入和输出。
2.4.1.1 网络结构
- 激活层默认不画网络图当中,这个网络结构当时使用的是sigmoid和Tanh函数,还没有出现Relu函数
- 将卷积、激活、池化视作一层,即使池化没有参数
2.4.1.2 参数形状总结
shape | size | parameters | |
---|---|---|---|
Input | (32,32,3) | 3072 | 0 |
Conv1(f=5,s=1) | (28,28,6) | 4704 | 450+6 |
Pool1 | (14,14,6) | 1176 | 0 |
Conv2(f=5,s=1) | (10,10,16) | 1600 | 2400+16 |
Pool2 | (5,5,16) | 400 | 0 |
FC3 | (120,1) | 120 | 48000+120 |
FC4 | (84,1) | 84 | 10080+84 |
Ouput:softmax | (10,1) | 10 | 840+10 |
- 中间的特征大小变化不宜过快
事实上,在过去很多年,许多机构或者学者都发布了各种各样的网络,其实去了解设计网络最好的办法就是去研究现有的网络结构或者论文。大多数网络设计出来是为了Image Net的比赛(解决ImageNet中的1000类图像分类或定位问题)
- 点赞
- 收藏
- 关注作者
评论(0)