在PyTorch中,學習率衰減是一種優化技術,用于在訓練過程中逐漸減小學習率。這有助于模型在訓練初期快速收斂,同時在后期獲得更精確的解。以下是在PyTorch中實現學習率衰減的幾種方法:
torch.optim.lr_scheduler
模塊中的StepLR
類:import torch
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR
# 創建一個簡單的模型
model = torch.nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# 創建一個StepLR調度器,每隔10個epoch將學習率乘以0.1
scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
# 訓練循環
for epoch in range(100):
# 訓練模型...
# 更新學習率
scheduler.step()
torch.optim.lr_scheduler
模塊中的ReduceLROnPlateau
類:import torch
import torch.optim as optim
from torch.optim.lr_scheduler import ReduceLROnPlateau
# 創建一個簡單的模型
model = torch.nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# 創建一個ReduceLROnPlateau調度器,當驗證集上的損失不再降低時,將學習率乘以0.1
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=True)
# 訓練循環
for epoch in range(100):
# 訓練模型...
# 計算驗證集上的損失
val_loss = ...
# 更新學習率
scheduler.step(val_loss)
import torch
import torch.optim as optim
# 創建一個簡單的模型
model = torch.nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
def custom_lr_decay(epoch, lr):
decay_rate = 0.1
decay_step = 10
if epoch % decay_step == 0:
return lr * decay_rate
else:
return lr
# 訓練循環
for epoch in range(100):
# 訓練模型...
# 更新學習率
lr = custom_lr_decay(epoch, optimizer.param_groups[0]['lr'])
for param_group in optimizer.param_groups:
param_group['lr'] = lr
這些方法都可以幫助你在PyTorch中實現學習率衰減。你可以根據自己的需求選擇合適的方法。