用pytorch的nn.Module構造簡單全連結層例項
阿新 • • 發佈:2020-01-16
python版本3.7,用的是虛擬環境安裝的pytorch,這樣隨便折騰,不怕影響其他的python框架
1、先定義一個類Linear,繼承nn.Module
import torch as t from torch import nn from torch.autograd import Variable as V class Linear(nn.Module): '''因為Variable自動求導,所以不需要實現backward()''' def __init__(self,in_features,out_features): super().__init__() self.w = nn.Parameter( t.randn( in_features,out_features ) ) #權重w 注意Parameter是一個特殊的Variable self.b = nn.Parameter( t.randn( out_features ) ) #偏值b def forward( self,x ): #引數 x 是一個Variable物件 x = x.mm( self.w ) return x + self.b.expand_as( x ) #讓b的形狀符合 輸出的x的形狀
2、驗證一下
layer = Linear( 4,3 ) input = V ( t.randn( 2,4 ) )#包裝一個Variable作為輸入 out = layer( input ) out
#成功執行,結果如下:
tensor([[-2.1934,2.5590,4.0233],[ 1.1098,-3.8182,0.1848]],grad_fn=<AddBackward0>)
下面利用Linear構造一個多層網路
class Perceptron( nn.Module ): def __init__( self,hidden_features,out_features ): super().__init__() self.layer1 = Linear( in_features,hidden_features ) self.layer2 = Linear( hidden_features,out_features ) def forward ( self,x ): x = self.layer1( x ) x = t.sigmoid( x ) #用sigmoid()啟用函式 return self.layer2( x )
測試一下
perceptron = Perceptron ( 5,3,1 ) for name,param in perceptron.named_parameters(): print( name,param.size() )
輸出如預期:
layer1.w torch.Size([5,3]) layer1.b torch.Size([3]) layer2.w torch.Size([3,1]) layer2.b torch.Size([1])
以上這篇用pytorch的nn.Module構造簡單全連結層例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。