作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道可以使用教程中的方法简单地为所有人完成此操作:
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 的学习规则应用于每个优化器。对吗?
最佳答案
据我所知这是不可能的。主要是因为这并不是真正有效的梯度下降。有很多优化器可以根据自己的可变特定缩放因子进行学习(例如 Adam 或 AdaGrad)。指定每个变量的学习率(常量)意味着您不再遵循梯度,虽然这对于制定良好的数学方法是有意义的,但简单地将它们设置为预定义的值只是一种启发式方法,我认为这是不在核心 TF 中实现此功能的原因。
正如你所说 - 你总是可以自己做,定义你自己的优化器,迭代计算梯度之间的变量并应用它们,这将是大约 3-4 行代码(一行用于计算梯度,一行用于计算梯度)迭代并添加乘法运算,以及一个将它们应用回来的运算),据我所知 - 这是实现您的目标的最简单的解决方案。关于python - 如何为 TensorFlow 中的不同层或变量设置不同的学习率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727612/
我是一名优秀的程序员,十分优秀!