自己在嘗試了官方的**後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧!
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)defforward
(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)
['param_groups'][
0]['lr'])
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...