练习

  1. 使用 He 初始化随机选择权重,是否可以将所有权重初始化为相同的值?
  2. 可以将偏置初始化为 0 吗?
  3. 说出 ELU 激活功能与 ReLU 相比的三个优点。
  4. 在哪些情况下,您想要使用以下每个激活函数:ELU,leaky ReLU(及其变体),ReLU,tanh,logistic 以及 softmax?
  5. 使用MomentumOptimizer时,如果将momentum超参数设置得太接近 1(例如,0.99999),会发生什么情况?
  6. 请列举您可以生成稀疏模型的三种方法。
  7. dropout 是否会减慢训练? 它是否会减慢推断(即预测新的实例)?
  8. 深度学习。
    1. 建立一个 DNN,有五个隐藏层,每层 100 个神经元,使用 He 初始化和 ELU 激活函数。
    2. 使用 Adam 优化和提前停止,请尝试在 MNIST 上进行训练,但只能使用数字 0 到 4,因为我们将在下一个练习中在数字 5 到 9 上进行迁移学习。 您需要一个包含五个神经元的 softmax 输出层,并且一如既往地确保定期保存检查点,并保存最终模型,以便稍后再使用它。
    3. 使用交叉验证调整超参数,并查看你能达到什么准确度。
    4. 现在尝试添加批量标准化并比较学习曲线:它是否比以前收敛得更快? 它是否会产生更好的模型?
    5. 模型是否过拟合训练集? 尝试将 dropout 添加到每一层,然后重试。 它有帮助吗?
  9. 迁移学习。
    1. 创建一个新的 DNN,它复制先前模型的所有预训练的隐藏层,冻结它们,并用新的一层替换 softmax 输出层。
    2. 在数字 5 到 9 训练这个新的 DNN ,每个数字只使用 100 个图像,需要多长时间? 尽管样本这么少,你能达到高准确度吗?
    3. 尝试缓存冻结的层,并再次训练模型:现在速度有多快?
    4. 再次尝试复用四个隐藏层而不是五个。 你能达到更高的准确度吗?
    5. 现在,解冻前两个隐藏层并继续训练:您可以让模型表现得更好吗?
  10. 辅助任务的预训练。
    1. 在本练习中,你将构建一个 DNN,用于比较两个 MNIST 数字图像,并预测它们是否代表相同的数字。 然后,你将复用该网络的较低层,来使用非常少的训练数据来训练 MNIST 分类器。 首先构建两个 DNN(我们称之为 DNN A 和 B),它们与之前构建的 DNN 类似,但没有输出层:每个 DNN 应该有五个隐藏层,每个层包含 100 个神经元,使用 He 初始化和 ELU 激活函数。 接下来,在两个 DNN 上添加一个输出层。 你应该使用 TensorFlow 的concat()函数和axis = 1`,将两个 DNN 的输出沿着横轴连接,然后将结果输入到输出层。 输出层应该包含单个神经元,使用 logistic 激活函数。
    2. 将 MNIST 训练集分为两组:第一部分应包含 55,000个 图像,第二部分应包含 5000 个图像。 创建一个生成训练批次的函数,其中每个实例都是从第一部分中挑选的一对 MNIST 图像。 一半的训练实例应该是属于同一类的图像对,而另一半应该是来自不同类别的图像。 对于每一对,如果图像来自同一类,训练标签应该为 0;如果来自不同类,则标签应为 1。
    3. 在这个训练集上训练 DNN。 对于每个图像对,你可以同时将第一张图像送入 DNN A,将第二张图像送入 DNN B。整个网络将逐渐学会判断两张图像是否属于同一类别。
    4. 现在通过复用和冻结 DNN A 的隐藏层,并添加 1 0个神经元的 softmax 输出层来创建一个新的 DNN。 在第二部分上训练这个网络,看看你是否可以实现较好的表现,尽管每类只有 500 个图像。

这些问题的答案在附录 A 中。