如果想要靈活地使用模型,可能需要自定義引數,比如
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 ...