使用场景
有时候我们需要为不同的网络层设置不同的学习率。比如在fine-tune的时候,一个best practice就是在ImageNet上预训练的骨干部分使用较小的学习率,而新添加的部分使用较大的学习率。如图所示的计算图谱,如果我们希望骨干部分的残差网络学习率小一点,而新增加的aspp模块学习率稍大一点。
虽然TensorFlow对使用不同的学习率没有提供比较便捷的支持,但使用TF提供的低层API简单封装一下优化器便可达到我们的目的。
先写一个函数用于获取具体的优化器:
def get_solver(kind, lr):
kind = kind.lower()
if kind == 'adam':
solver = tf.train.AdamOptimizer(lr)
elif kind == 'sgd':
solver = tf.train.GradientDescentOptimizer(lr)
elif kind == 'momentum':
solver = tf.train.MomentumOptimizer(lr, momentum=0.9)
else:
r