我正在使用现有的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)
。
但是,正则化损失行为仍然存在。
答案 0 :(得分:0)
我在this post中的评论中找到了原因。在我的情况下,为global_step
的global_step参数提供两次“ apply_gradients
”是没有意义的。由于learning_rate
和优化器参数取决于global_step
,因此训练过程(尤其是正则化损失行为)有所不同。感谢y.selivonchyk指出这一点。