3 4 神經網路工具箱nn

2021-10-14 13:21:08 字數 1097 閱讀 1700

前面我們使用過autograd和tensor實現過機器學習。但對於大型網路,autograd太過於底層和繁雜。所以我們使用nn工具箱。在nn工具箱裡有兩個重要模組:nn.module,nn.functional

nn.module是nn的乙個核心資料結構,它可以是網路的某個層,也可以是包含多層的神經網路。最常見的做法是繼承nn.module類,生成自己的網路層,前面中就通過定義net類就採用這種啟用方法(class net(nn.module))。nn中已實現絕大多數層,包括全連線層、損失層、啟用層、卷積層、迴圈層等,這些層都是nn.module的子類,能夠自動檢測到自己的parameters,並將其作為學習引數,且針對gpu執行進行cudnn優化。

nn中的層,一種是繼承了nn.module,其命名一般是nn.***(第乙個字母大寫),如nn.linear、nn.conv2d、nn.crossentropyloss。另一種是nn.functional中的函式,其名稱一般是nn.functional.***,如nn.functional.linear、nn.functional.conv2d、nn.functional.cross_entropy等。從功能上說兩者相當,不過在具體使用時,還是有區別的:

1、nn.***繼承與nn.module,nn.***需要先例項化並傳入引數,然後以函式呼叫的方式呼叫例項化的物件並傳入資料。它能夠很好的地與nn.sequential結合使用,而nn.functional.***無法與nn.sequential結合使用

2、nn.***不需要自己定義和管理weight、bias引數;而nn.functional.***需要自己定義weight、bias引數,每次呼叫的時候都需要手動傳入weight、bias引數,不利於**復用

3、它們倆對dropout在訓練和測試階段上操作還是有區別的,使用nn.***定義dropout,在呼叫model.eval()時,自動實現狀態轉換,而使用nn.functional.***無此功能

總結一下,兩者功能基本相同,pytorch官方推薦:具有學習引數的(例如:conv2d,linear,batch_norm)採用nn.***方式。沒有學習引數的(例如:maxpool,loss func、activation func)等根據個人使用習慣nn.functional.***或nn.***方式。

神經網路工具箱nn

使用autograd可實現深度學習模型,但其抽象程度較低,如果用其來實現深度學習模型,則需要編寫的 量極大。在這種情況下,torch.nn應運而生,其是專門為深度學習而設計的模組。torch.nn的核心資料結構是module,它是乙個抽象概念,既可以表示神經網路中的某個層 layer 也可以表示乙個...

matlab神經網路工具箱

1 聚類 2 輸入輸出得擬合關係 3 模式識別和分類 4 動態時間序列 下面我們分別來看一下這些神經網路工具箱得使用 這是乙個簡單的對輸入輸出資料進行擬合得工具箱,使用具有隱藏層得神經網路結構。在本文中選取樣例,13 256得矩陣,表示256個人得13項身體指標樣本資料。在進行了前面比較簡單的選擇之...

MATLAB神經網路工具箱函式

說明 本文件中所列出的函式適用於matlab5.3以上版本,為了簡明起見,只列出了函式名,若需要進一步的說明,請參閱matlab的幫助文件。1.網路建立函式 newp 建立感知器網路 newlind 設計一線性層 newlin 建立一線性層 newff 建立一前饋bp網路 newcf 建立一多層前饋...