我正在使用现有的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_1variables_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)

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

最佳答案

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

09-20 22:37