Pytorch學習(三)---神經網絡工具箱和優化器

一、神經網絡工具箱nn

1、nn.Module

nn.Module是nn的一個核心數據結構,它可以是神經網絡的某個層,也可以是包含多層的神經網絡。在實際使用中,最常見的做法是繼承nn.Module,生成自己的網絡/層。nn中已經實現了絕大多數層,包括全連接層、損失層、激活層、卷積層、循環層等,這些都是nn.Module的子類,能夠自動檢測到自己的Parameter,並將其作爲學習參數,且針對GPU運行進行了cuDNN優化。

2、nn.functional

nn中的層,一類是繼承了nn.Module,其命名一般爲nn.Xxx(第一個是大寫),如nn.Linear、nn.Conv2d、nn.CrossEntropyLoss等。另一類是nn.functional中的函數,其名稱一般爲nn.functional.xxx,如nn.functionallinear、nn.functional.conv2d等。
從功能來說兩者相當,基於nn.Module能實現的層,使用nn.functional也可以實現,反之亦然。
Pytorch官方推薦:具有學習參數的,例如linear,conv2d,batch_norm,採用nn.Xxx方式。沒有學習參數的,例如maxpool,loss func,activation func等根據個人選擇使用二者皆可。

二、優化器

Pytorch常用的優化方法都封裝在torch.optim裏面,其設計靈活,可以擴展爲自定義的優化方法。所有的優化方法都是繼承了基類optim.Optimizer。
使用優化器的一般步驟爲:
1.建立優化器實例
導入optim模塊,實例化SGD優化器

import torch.optim as optim
optimizer = optim.SGD(model.parameters(),lr=lr,momentum=momentum)

2.前向傳播
把輸入數據傳入神經網絡Net實例化對象model中,自動執行forward函數,得到out輸出值,然後out與標記label計算損失值loss。

out = model(img)
loss = criterion(out,label)

3.清空梯度
缺省情況下題都是累加的,在提督反響傳播前,先需把梯度清零。

optimizer.zero_grad()

4.反向傳播
給予損失值,把梯度之進行反向傳播

loss.backward()

5.更新參數
基於當前梯度(存儲在參數的.grad屬性中)更新參數

optimizer.step()

3.動態修改學習率參數

直接採用修改參數optimzer.param_groups。
optimzer.param_groups:長度爲1的list,optimzer.param_groups[0]:長度爲6的字典,包括權重參數、lr、momentum等參數。

print(len(optimizer.am_groups[0]))#結果爲6

例:

for epoch in range(num_epoched):par
    #動態修改參數學習率
    if epoch%5 = 0:
        optimizer.am_groups[0])['lr'] *=0.1

    for img,label in train_loader:
    #######
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章