如何禁用张量流中特定层的动量?

How to disable momentum in specific layer in tensorflow?

我有一个包含三个隐藏层的神经网络,可以使用 "pure" 梯度下降或一些更复杂的技术对其进行训练。我还注意到,在我的问题中,基于动量的优化方法(adam、adadelta、momentum)效果更好。

现在到了有趣的部分。按照设计,我想禁用 NN 第一层的动量。这意味着,我想在第二层和第三层使用 Adam 更新权重,但在第一层使用简单的梯度下降。

当然,我总是可以编写自己的优化器:用 tf.gradients(loss, tf.trainable_variables()) 计算梯度,然后自己做动量技巧。但是如果可以选择在每一层中使用特殊的优化器参数,那就太好了。有人听说过这样的方法吗?

好吧,您可以向优化器提供要优化的变量列表 (docs):

opt = tf.train.AdamOptimizer()
opt_op = opt.minimize(loss, var_list=[W1, b1])
opt2 = tf.train.GradientDescentOptimizer(learning_rate)
opt2_op = opt2.minimize(loss, var_list=[W2, b2])

您必须自己提取给定层的变量列表(可能是权重和偏差)。