我正在使用 Keras/Tensorflow 训练一个具有一个隐藏层和批量梯度下降的 MLP 神经网络。将 dropout 应用于输入层将每个 epoch 的训练时间增加了约 25%,与 dropout 率无关。
很明显,dropout 增加了达到验证损失最小值所需的 epoch 数量,但我认为每个 epoch 的训练时间会通过丢弃单位而减少。
有谁知道原因?
我正在使用 Keras/Tensorflow 训练一个具有一个隐藏层和批量梯度下降的 MLP 神经网络。将 dropout 应用于输入层将每个 epoch 的训练时间增加了约 25%,与 dropout 率无关。
很明显,dropout 增加了达到验证损失最小值所需的 epoch 数量,但我认为每个 epoch 的训练时间会通过丢弃单位而减少。
有谁知道原因?
但我认为每个 epoch 的训练时间会因丢弃单元而减少。
事实并非如此。不过我理解你的理由。您认为将组件清零会减少计算量。这将是稀疏矩阵的情况,但不是密集矩阵。
TensorFlow 和任何与此相关的深度学习框架都在密集向量上使用向量化操作*。这意味着零的数量没有区别,因为您将使用所有条目来计算矩阵运算。
实际上,情况正好相反,因为 dropout 需要
* 它们还支持稀疏矩阵,但它们对大多数权重没有意义,因为它们主要在您有不到一半的条目等于零时很有用。