我知道可以使用教程中的内容为所有人完成这些操作:
opt = tf.train.GradientDescentOptimizer(learning_rate)
然而,如果可以传递将变量名称映射到其相应学习速率的字典,那将是很好的。这可能吗?
我知道可以简单地使用compute_gradients()
后跟apply_gradients()
并手动执行,但这看起来很愚蠢。是否有更智能的方法为特定变量分配特定的学习率?
这是创建特定优化器的唯一方法,如:
# Create an optimizer with the desired parameters.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimize a cost by updating a list of variables.
# "cost" is a Tensor, and the list of variables contains tf.Variable
# objects.
opt_op = opt.minimize(cost, var_list=<list of variables>)
并简单地给每个优化器提供特定的学习率?但这意味着我们有一个优化器列表,因此,我们需要将sess.run的学习规则应用于每个优化器。正确?
答案 0 :(得分:1)
据我所知,这是不可能的。主要是因为这不是真正有效的梯度下降。有很多优化器可以学习他们自己的变量特定缩放因子(如Adam或AdaGrad)。规范每变量学习率(常数1)意味着你不再遵循渐变,虽然它对于精心设计的数学方法是有意义的,但简单地将它们设置为预定值只是一种启发式,我认为是在核心TF中没有实现这一点的原因。
正如你所说 - 你总是可以自己做,定义你自己的优化器,在计算梯度之间迭代变量并应用它们,这将是大约3-4行代码(一行计算梯度,一行计算迭代并添加乘法运算,并将其重新应用一次),据我所知 - 这是实现目标的最简单的解决方案。