我正在使用现有的tensorflow模型。
对于网络的一部分,我想设置与其余网络不同的学习率。假设all_variables
由variables_1
和variables_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_vars
和variables_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)
。但是,仍存在正则化损失行为。
最佳答案
我通过this post中的注释找到了原因。在我的情况下,为global_step
的global_step参数提供两次“ apply_gradients
”是没有意义的。由于learning_rate
以及优化器参数取决于global_step
,因此训练过程(尤其是正则化损失行为)有所不同。感谢y.selivonchyk指出这一点。