额外的优化器影响正则化损失

Additional optimizer affects regularization loss

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

对于网络的一部分,我想设置与其余网络不同的学习率。假设 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)

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

我通过 . In my case, it doesn't make sense to to supply twice "global_step" for the global_step argument of apply_gradients. As the learning_rate and therefore the optimizer arguments depends on global_step, the training process, especially regularization loss behaviour, differs. Thanks to y.selivonchyk 中的评论发现了原因,指出了这一点。