注意,一般官方介面都帶有可導功能,如果你實現的層不具有可導功能,就需要自己實現梯度的反向傳遞。
官方linear層:
class linear(module):
def __init__(self, in_features,www.cppcns.com out_features, bias=true):
super(linear, self).__init__()
self.in_features = in_features
self.out_features = out_features
s程式設計客棧elf.weight = parameter(torch.tensor(out_features, in_features))
if bias:
self.bias = parameter(torch.tensor(out_features))
else:
self.register_parameter('bias', none)
self.reset_parameters()
def reset_parameters(self):
stdv = 1. / math.sqrt(self.weight.size(1))
self.weight.data.uniform_(-stdv, stdv)
if self.bias is not none:
self.bias.data.uniform_(-stdv, stdv)
def forward(self, input):
return f.linear(input, self.weight, self.bias)
def extra_repr(self):
return 'in_features={}, out_features={}, bias={}'.format(
self.in_features, self.out_features, self.bias is not none
)實現view層
class reshape(nn.module):
def __init__(self, *args):
super(reshape, self).__init__()
self.shape = args
def forward(self, x):程式設計客棧
return x.view((x.size(0),)+self.shape)
實現linearwise層
class linearwise(nn.module):
def __init__(self, in_features, bias=true):
super(linearwise, self).__init__()
self.in_features = in_features
self.weight = nn.parameter(torch.tensor(self.in_features))
if bias:
self.bias = nn.parameter(torch.tensor(self.in_features))
else:
self.register_parameter('bias', none)
self.reset_pwww.cppcns.comarameters()
def reset_parameters(self):
stdv = 1. / math.sqrt(self.weight.size(0))
self.weight.data.uniform_(-stdv, stdv)
if self.bias is not none:
self.bias.data.uniform_(-stdv, stdvwww.cppcns.com)
def forward(self, input):
x = input * self.weight
if self.bias is not none:
x = x + self.bias
return x
本文標題: pytorch 實現自定義引數層的例子
本文位址:
PyTorch 自定義層
與使用module類構造模型類似。下面的centeredlayer類通過繼承module類自定義了乙個將輸入減掉均值後輸出的層,並將層的計算定義在了forward函式裡。這個層裡不含模型引數。class mydense nn.module def init self super mydense,se...
Pytorch自定義引數
如果想要靈活地使用模型,可能需要自定義引數,比如 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 defforwa...
PyTorch 自定義層(區別於自定義模型)
博主在學習三值神經網路時,使用了lenet 5模型,程式設計 需要對lenet 5模型中的卷積層與全連線層進行自定義,搜尋他人方法後,博主產生了乙個疑問,絕大多數提供的自定義層方法都是繼承nn.module模型,而這方法據說是官方提供 官網 pytorch 自定義線性層 如下 class linea...