python - 如何为 TensorFlow 中的不同层或变量设置不同的学习率?

标签 python machine-learning neural-network tensorflow conv-neural-network

我知道可以使用教程中的方法简单地为所有人完成此操作:

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/

相关文章:

python - 量化 numpy 向量的快速方法

machine-learning - 分布式运行 TensorFlow 时,多个参数服务器不会分担负载

python - LSTM 训练期间持续损失 - PyTorch

machine-learning - 使用机器学习根据传感器数据进行故障预测

tensorflow - 我正在阅读一本关于深度学习的书,但我无法理解关于 Conv2D 的这一部分

python - 开始 :stop slicing inconsistencies between numpy and Pandas?

python - 有条件地写入 xlsx

python - 为什么 `letter=="A"或 "a"` 总是评估为 True?

machine-learning - 安装 Surprise 包时出错

python - 如何减少VGG16中间层瓶颈特征的大小?