pytorch筆記 調整網路學習率

2022-05-18 20:53:07 字數 2294 閱讀 1266

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 t.nn.conv2d(6, 16, 5),

9t.nn.relu(),

10 t.nn.maxpool2d(2, 2)11)

12#由於調整shape並不是乙個class層,13#

所以在涉及這種操作(非nn.module操作)需要拆分為多個模型

14 self.classifier =t.nn.sequential(

15 t.nn.linear(16*5*5, 120),

16t.nn.relu(),

17 t.nn.linear(120, 84),

18t.nn.relu(),

19 t.nn.linear(84, 10)20)

2122

defforward(self, x):

23 x =self.features(x)

24 x = x.view(-1, 16*5*5)

25 x =self.classifier(x)

26return x

這裡lenet被拆解成features和classifier兩個模型來實現。在訓練時,可以為features和classifier分別指定不同的學習率。

1 model =lenet()

2 optimizer = optim.sgd([,

3

4 ], lr = 1e-5)

對於 被指定了特殊的學習率 'lr': 1e-2,則按照該值優化。

對於 沒有特殊指定學習率,則使用 lr = 1e-5。

sgd的param_groups中儲存著 'params', 'lr', 'momentum', 'dampening','weight_decay','nesterov'及對應值的字典。

在 class torch.optim.optimizer(params, defaults) 中,提供了 add_param_group(param_group)

函式,可以在optimizer中新增param group. 這在固定與訓練網路模型部分,fine-tuning 訓練層部分時很實用。

1

for p in

optimizer.param_groups:

2 p['

lr'] = rate()

如果需要動態設定學習率,可以以這種方式,將關於學習率的函式賦值給引數的['lr']屬性。

還以以上定義的lenet的optimizer為例,根據上面的定義,有兩個param_groups, 乙個是model.features.parameters(), 乙個是

指數衰減

Pytorch訓練網路時調整學習率

為了得到更好的網路,學習率通常是要調整的,即剛開始用較大的學習率來加快網路的訓練,之後為了提高精確度,需要將學習率調低一點。如圖所示,步長 學習率 太大容易跨過最優解。如下 表示每20個epoch學習率調整為之前的10 optimizer optim.sgd gan.parameters lr 0....

Pytorch 如何訓練網路時調整學習率

為了得到更好的網路,學習率通常是要調整的,即剛開始用較大的學習率來加快網路的訓練,之後為了提高精確度,需要將學習率調低一點。如圖所示,步長 學習率 太大容易跨過最優解。表示每20個epoch學習率調整為之前的10 optimizer optim.sgd gan.parameters lr 0.1,m...

pytorch神經網路學習筆記 2

關係擬合 import torch from torch.autograd import variable import torch.nn.functional as f import matplotlib.pyplot as plt x torch.unsqueeze torch.linspace...