【问题标题】:Additional optimizer affects regularization loss额外的优化器会影响正则化损失
【发布时间】:2019-07-24 17:30:14
【问题描述】:

我正在使用现有的张量流模型。

对于网络的一部分,我想设置与其余网络不同的学习率。假设all_variablesvariables_1variables_2 组成,那么我想更改variables_2 变量的学习率。

用于设置优化器、计算和应用渐变的现有代码基本上如下所示:

optimizer = tf.train.MomentumOptimizer(learning_rate, 0.9)
grads_and_vars = optimizer.compute_gradients(loss, all_variables)
grads_updates = optimizer.apply_gradients(grads_and_vars, global_step)

我已经尝试按照这个方案创建第二个优化器。但是,对于调试,我将两个学习率设置为相等,并且正则化损失的减少非常不同。

是否可以创建第二个优化器optimizer_new,并仅在variables_1variables_2 的相应grads_and_vars 上应用apply_gradients? IE。而不是这一行

grads_updates = optimizer.apply_gradients(grads_and_vars, global_step) 

可以使用

grads_updates = optimizer.apply_gradients(grads_and_vars['variables_1'], global_step)

grads_updates_new = optimizer_new.apply_gradients(grads_and_vars['variables_2'], global_step)

最后,train_op = tf.group(grads_updates, grads_updates_new)

但是,正则化损失行为仍然存在。

【问题讨论】:

  • 为了进行苹果对苹果的比较,您还需要为第二个 compute_gradients 提供 grad_loss 参数,这应该是激活张量的梯度(您可以尝试在图形操作中找到类似的张量并发送它在 vars 列表中选择 1)介于 vars1 和 vars2 之间。
  • 另外,您能否计算所有步骤的 grads,然后在将它们发送到 apply_gradietns 之前为相应的 var 集缩放 grads?
  • 我不确定我是否完全理解你。执行compute_gradients(loss, all_variables),然后只提取与variable_2的变量对应的grads_and_vars,然后在这些上使用optimizer_new.apply_gradients,得到相同的结果
  • 这是关于我的第二条评论:grads = opt.compute_grads(loss, all_vars); g1, g2 = _split(grads) g2 = [x*lr2/lr1 for x in g2] opt.apply_grads(g1+g2)
  • 我在拆分 g1、g2 时遇到不支持的项目分配问题。你的第一个答案的 grad_loss 是什么意思?

标签: python tensorflow slim


【解决方案1】:

我通过this post 中的评论发现了原因。就我而言,为apply_gradients 的 global_step 参数提供两次“global_step”是没有意义的。由于learning_rate 以及因此优化器参数取决于global_step,因此训练过程,尤其是正则化损失行为会有所不同。感谢y.selivonchyk 指出这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多