自己在嘗試了官方的**後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧!
import torch
import matplotlib.pyplot as plt
%matplotlib inline
from torch.optim import *
import torch.nn as nn
class net(nn.module):
def __init__(self):
super(net,self).__init__()
self.fc = nn.linear(1,10)
def forward(self,x):
return self.fc(x)
model = net()
lr = 0.01
optimizer = adam(model.parameters(),lr = lr)
lr_list =
for epoch in range(100):
if epoch % 5 == 0:
for p in optimizer.param_groups:
p['lr'] *= 0.9
plt.plot(range(100),lr_list,color = 'r')
關鍵是如下兩行能達到手動階梯式更改,自己也可按需求來更改變換函式
引數含義
lr_lambda
會接收到乙個int引數:epoch,然後根據epoch計算出對應的lr。如果設定多個lambda函式的話,會分別作用於optimizer中的不同的params_group
引數含義
t_max
對應1/2個cos週期所對應的epoch數值
eta_min
最小的lr值,預設為0
在發現loss不再降低或者acc不再提高之後,降低學習率。各引數意義如下:引數
含義mode
'min'模式檢測metric是否不再減小,'max'模式檢測metric是否不再增大;
factor
觸發條件後lr*=factor;
patience
不再減小(或增大)的累計次數;
verbose
觸發條件後print;
threshold
只關注超過閾值的顯著變化;
threshold_mode
有rel和abs兩種閾值計算模式,rel規則:max模式下如果超過best(1+threshold)為顯著,min模式下如果低於best(1-threshold)為顯著;abs規則:max模式下如果超過best+threshold為顯著,min模式下如果低於best-threshold為顯著;
cooldown
觸發一次條件後,等待一定epoch再進行檢測,避免lr下降過速;
min_lr
最小的允許lr;
eps如果新舊lr之間的差異小與1e-8,則忽略此次更新。
import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.nn as nn
import torch.nn.functional as f
import torch.optim as optim
from datetime import datetime
from torch.utils.tensorboard import summarywriter
from torch.optim import *
transform = transforms.compose(
[transforms.totensor(),
transforms.normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.cifar10(root='./data', train=true,
download=true, transform=transform)
trainloader = torch.utils.data.dataloader(trainset, batch_size=4,
shuffle=true, num_workers=0)
testset = torchvision.datasets.cifar10(root='./data', train=false,
download=true, transform=transform)
testloader = torch.utils.data.dataloader(testset, batch_size=4,
shuffle=false, num_workers=0)
classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
Pytorch學習率更新
自己在嘗試了官方的 後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧 import torch import matplotlib.pyplot as plt matplotlib inline from...
分層學習率設定和學習率衰減(pytorch)
在使用bert或者其它預訓練模型進行微調,下接其它具體任務相關的模組時,會面臨這樣乙個問題,bert由於已經進行了預訓練,引數已經達到了乙個較好的水平,如果要保持其不會降低,學習率就不能太大,而下接結構是從零開始訓練,用小的學習率訓練不僅學習慢,而且也很難與bert本體訓練同步。因此在訓練時候就需要...
pytorch筆記 調整網路學習率
1 class lenet t.nn.module 2def init self 3 super lenet,self init 4 self.features t.nn.sequential 5 t.nn.conv2d 3,6,5 6t.nn.relu 7 t.nn.maxpool2d 2,2 8...