文章目录
- 1. 为什么要进行实例探究
- 2. 经典网络
- 3. 残差网络 ResNets
- 4. 残差网络为什么有用
- 5. 网络中的网络 以及 1×1 卷积
- 6. 谷歌 Inception 网络简介
- 7. Inception 网络
- 8. 使用开源的实现方案
- 9. 迁移学习
- 10. 数据增强 Data augmentation
- 11. 计算机视觉现状
- 作业
参考: 吴恩达视频课 深度学习笔记
1. 为什么要进行实例探究
学习大佬们的组建网络的方法,借鉴过来解决自己的问题
经典的网络模型:
- LeNet-5
- AlexNet
- VGG
ResNet,残差网络,它有152层 Inception
2. 经典网络
3. 残差网络 ResNets
非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题
- 中间的激活能够到达网络的更深层
- 这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能
- ResNet 在训练深度网络方面非常有效
4. 残差网络为什么有用
残差网络起作用的主要原因:
- 残差块学习恒等函数非常容易,你能确定网络性能不会受到影响,很多时候甚至可以提高效率,或者说至少不会降低网络的效率
5. 网络中的网络 以及 1×1 卷积
我们知道,可以通过池化层来压缩输入的高度和宽度,但是池化层不改变通道数
1×1卷积层 给神经网络添加了一个非线性函数,从而减少或保持输入层中的通道数量不变,也可以增加通道数量
6. 谷歌 Inception 网络简介
构建卷积层时,你要决定过滤器的大小究竟是1×1,3×3 还是 5×5,要不要添加池化层。
而 Inception网络 的作用就是代替你来决定,虽然网络架构变得更加复杂,但网络表现却非常好
基本思想是:
- Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化
- 而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合
通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本
事实证明,只要合理构建瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算
7. Inception 网络
Inception 模块:
Inception 网络:Inception 模块堆叠
8. 使用开源的实现方案
事实证明很多神经网络复杂细致,因而难以复制,因为一些参数调整的细节问题,例如学习率衰减等等,会影响性能
- 选择一个你喜欢的神经网络框架
- 接着寻找一个开源实现,从GitHub下载下来,以此基础开始构建 这样做的优点在于,这些网络通常都需要很长的时间来训练,而或许有人已经使用多个GPU,通过庞大的数据集预先训练了这些网络,你就可以使用这些网络进行迁移学习
9. 迁移学习
10. 数据增强 Data augmentation
数据扩充是经常使用的一种技巧来提高计算机视觉系统的表现
- 垂直镜像对称(常用)
- 随机裁剪(常用)
- 旋转,剪切(局部扭曲)(不常用)
- 色彩转换(给RGB通道按分布加上失真值),使得算法对照片的颜色更改更具鲁棒性
常用的实现数据扩充的方法:
- 使用一个线程或者是多线程,用来加载数据,实现变形失真
- 然后传给其他的线程或者其他进程,来训练,可以并行实现
数据扩充过程中也有一些超参数,比如,颜色变化,随机裁剪参数。 可以使用别人的开源实现,了解他们如何实现数据扩充。也可以自己去调整这些参数
11. 计算机视觉现状
为了提高性能表现:
- 集成:使用多个神经网络,平均他们的输出,缺点,更多的时间,占用内存更大
- Multi-crop 数据扩充,也是运行时间多,只有1个神经网络占用内存
附:
deep-learning-models/resnet50.py 开源实现 Deep Residual Learning for Image Recognition ResNets 论文