在訓練神經網絡時,有些情況下,需要對學習率進行調整。在這裏分別介紹TensorFlow和PyTorch的一種方法。
tf.train.exponential_decay()
TensorFlow提供了指數衰減法
tf.train.exponential_decay(learning_rate, global_step=global_step, decay_steps=100,decay_rate=0.99, staircase=True)
計算公式:
learning_rate * decay_rate^(global_step / decay_steps)
參數
- learning_rate:初始學習率
- global_step:計數器,每進行一次更新,加1
- decay_steps:衰減步長
- decay_rate:衰減係數
- staircase:若爲True,則學習率呈階梯形式下降,即global / decay_steps爲整數。相當於每隔decay_steps更新一次學習率;若爲False,則學習率呈連續下降,即global / decay_steps爲浮點型,每一步都會更新一次學習率。
torch.optim.lr_scheduler.StepLR()
PyTorch提供了基於epoch的學習率下降方法。該方法只是其中一種
torch.optim.lr_scheduler.StepLR(optimizer,step_size=100,gamma=0.99,last_epoch=-1)
計算公式:
learning_rate * gamma^(epoch / step_size)
參數
- optimizer:自己定義的優化器
- step_size:衰減步長,即每隔step_size個epoch,更新一次學習率
- gamma(float):衰減係數
- last_epoch(int):最後一次epoch的索引默認爲-1
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=100, gamma=0.99)
# 之後搭配 scheduler.step()進行操作。
參考文獻:https://www.cnblogs.com/happystudyeveryday/p/11144433.html