Pytorch學習率更新

2021-10-12 12:35:09 字數 4366 閱讀 5277

自己在嘗試了官方的**後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧!

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...