说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。
进入第二部分深度学习
第十一章训练深层神经网络
在第十章以及之前tf练习中,训练的深度神经网络都只是简单的demo,如果增大数据量或是面对更多的特征,遇到的问题就会棘手起来。
- 梯度消失(梯度爆炸),这会影响深度神经网络,并使较低层难以训练
- 训练效率
- 包含数百万参数的模型将会有严重的过拟合训练集的风险
本章中,教程从解释梯度消失问题开始,并探讨解决这个问题的一些最流行的解决方案。
接下来讨论各种优化器,与普通梯度下降相比,它们可以加速大型模型的训练。
介绍大型神经网络正则化技术。
9.复用来自其它框架的模型
在之后的几个小节中,教程讨论了对其他框架模型的复用问题。看着很乏味……
下面的代码显示了如何复制使用另一个框架训练的模型的第一个隐藏层的权重和偏置
对于想要复用的每个变量,我们找到它的初始化器的赋值操作,并得到它的第二个输入,它对应于初始化值。 当我们运行初始化程序时,我们使用feed_dict将初始化值替换为我们想要的值
冻结较低层
冻结缓存层
调整,删除或替换较高层
……
我略过了很多,因为实在不想看了
Model Zoo
在哪里可以找到一个类似于目标任务训练的神经网络?
- 在自己的模型目录。 这是保存所有模型并组织它们的一个很好的理由,以便以后可以轻松地检索。
- 在模型动物园中搜索。 许多人为了各种不同的任务而训练机器学习模型,并且善意地向公众发布预训练模型。
TensorFlow 在 https://github.com/tensorflow/models 中有自己的模型动物园。 包含了大多数最先进的图像分类网络,如 VGG,Inception 和 ResNet,包括代码,预训练模型和 工具来下载流行的图像数据集。
另一个流行的模型动物园是 Caffe 模型动物园。 它还包含许多在各种数据集(例如,ImageNet,Places 数据库,CIFAR10 等)上训练的计算机视觉模型(例如,LeNet,AlexNet,ZFNet,GoogLeNet,VGGNet,开始)。
Saumitro Dasgupta 写了一个转换器,https://github.com/ethereon/caffetensorflow。
n.实践指南
在本章中,我们已经涵盖了很多技术,你可能想知道应该使用哪些技术。当然,如果你能找到解决类似问题的方法,你应该尝试重用预训练的神经网络的一部分。
这个默认配置可能需要调整:
- 如果你找不到一个好的学习率(收敛速度太慢,所以你增加了训练速度,现在收敛速度很快,但是网络的准确性不是最理想的),那么你可以尝试添加一个学习率调整,如指数衰减。
- 如果你的训练集太小,你可以实现数据增强。
- 如果你需要一个稀疏的模型,你可以添加 l1 正则化混合(并可以选择在训练后将微小的权重归零)。 如果您需要更稀疏的模型,您可以尝试使用 FTRL 而不是 Adam 优化以及 l1 正则化。
- 如果在运行时需要快速模型,则可能需要删除批量标准化,并可能用 leakyReLU 替换 ELU 激活函数。 有一个稀疏的模型也将有所帮助。
- 有了这些指导方针,你现在已经准备好训练非常深的网络