1這裡lenet被拆解成features和classifier兩個模型來實現。在訓練時,可以為features和classifier分別指定不同的學習率。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
1 model =lenet()對於 被指定了特殊的學習率 'lr': 1e-2,則按照該值優化。2 optimizer = optim.sgd([,
3
4 ], lr = 1e-5)
對於 沒有特殊指定學習率,則使用 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如果需要動態設定學習率,可以以這種方式,將關於學習率的函式賦值給引數的['lr']屬性。for p in
optimizer.param_groups:
2 p['
lr'] = rate()
還以以上定義的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...