我有一个有三个隐藏层的神经网络,可以使用" pure"梯度下降或一些更复杂的技术。我也注意到在我的问题中,基于动量的优化方法(adam,adadelta,momentum)效果更好。
现在到了有趣的部分。按照设计,我想禁用NN第一层的动量。这意味着,我想在第二层和第三层更新Adam的权重,但在第一层使用简单的梯度下降。
当然,我总是可以编写自己的优化器:用tf.gradients(loss, tf.trainable_variables())
计算渐变,然后自己做动量技巧。但是可以选择在每一层中使用特殊的优化器参数。有没有人听说过这样做的方法?
答案 0 :(得分:1)
好吧,您可以提供要优化到优化器(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])
您必须自己提取给定图层的变量列表(可能是权重和偏差)。