附加的优化器会影响正则化损失

时间:2019-07-23 14:02:36

标签: python tensorflow slim

我正在使用现有的tensorflow模型。

对于网络的一部分,我想设置与其余网络不同的学习率。假设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,并简单地将apply_gradients应用于grads_and_varsvariables_1的相应variables_2上?即代替此行

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)

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

1 个答案:

答案 0 :(得分:0)

我在this post中的评论中找到了原因。在我的情况下,为global_step的global_step参数提供两次“ apply_gradients”是没有意义的。由于learning_rate和优化器参数取决于global_step,因此训练过程(尤其是正则化损失行为)有所不同。感谢y.selivonchyk指出这一点。