Pytorch自定義引數

2021-09-23 10:47:52 字數 1833 閱讀 3211

如果想要靈活地使用模型,可能需要自定義引數,比如

class

net(nn.module)

:def

__init__

(self)

:super

(net,self)

.__init__(

) self.a = torch.randn((2

,3),requires_grad=

true

) self.b = nn.linear(2,

2)defforward

(self,x)

:pass

這裡在模型裡定義了乙個引數矩陣a,但輸出模型的引數會發現

>>

>net = net(

)>>

>

for i in net.parameters():

...print

(i)parameter containing:

tensor([[

-0.6075

,0.5390],

[0.5895,-

0.3631]]

, requires_grad=

true

)parameter containing:

tensor([-

0.4341,-

0.1234

], requires_grad=

true

)

模型中並沒有a,而且模型訓練的時候,也不會更新a,將模型移到gpu上時,a也不會跟著走,如果自定義引數,需要手動註冊引數

class

net(nn.module)

:def

__init__

(self)

:super

(net,self)

.__init__(

) a = torch.randn((2

,3),requires_grad=

true

) self.a = torch.nn.parameter(a)

self.b = nn.linear(2,

2)self.register_parameter(

"ablah"

,self.a)

defforward

(self,x)

:return x

這樣就可以使模型包含引數a了

>>

>net = net(

)>>

>

for i in net.parameters():

...print

(i)parameter containing:

tensor([[

0.5211

,0.2569

,1.1290],

[-0.5820

,0.1013,-

1.3352]]

, requires_grad=

true

)parameter containing:

tensor([[

-0.4867

,0.0765],

[-0.0178

,0.5943]]

, requires_grad=

true

)parameter containing:

tensor(

[0.3423

,0.1557

], requires_grad=

true

)

PyTorch 自定義層

與使用module類構造模型類似。下面的centeredlayer類通過繼承module類自定義了乙個將輸入減掉均值後輸出的層,並將層的計算定義在了forward函式裡。這個層裡不含模型引數。class mydense nn.module def init self super mydense,se...

Pytorch 實現自定義引數層的例子

注意,一般官方介面都帶有可導功能,如果你實現的層不具有可導功能,就需要自己實現梯度的反向傳遞。官方linear層 class linear module def init self,in features,www.cppcns.com out features,bias true super lin...

自定義引數 Python自定義函式引數

1.種類 1 位置引數 x就是位置引數 usr bin env python coding utf 8 def power x result x x print result 2 預設引數n就是預設引數 usr bin env python coding utf 8 def power x,n 1 ...