Pytorch學習率更新

2022-07-10 18:30:15 字數 3721 閱讀 4419

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

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