我是第一次接触神经网络/PyTorch。我正在尝试制作一个网络,它接受一个矢量x,第一层是h_j = w_j^T * x + b_j,输出是max_j{h_j}。唯一的问题是,我希望通过w_j = S(k*a_j)将w_j限制在0和1之间,其中S是sigmoid函数,k是某个常数,a_j是实际的权重变量(w_j只是a_j的函数)。我如何在PyTorch中做到这一点?我不能只使用torch.nn.Linear层,必须在权重的sigmoid函数中添加其他/额外的东西?
另外一个问题是,对于最后一个输出层,我可以只使用torch.max来获取上一层输出的最大值吗?这是否表现得很好,还是有一些我不理解的torch.nn.Max或池化的东西需要发生?
谢谢!
发布于 2019-05-30 03:21:08
我真的不知道你为什么要这么做,但是你可以声明一个自定义的层,如下所示,将sigmoid应用于权重。
class NewLayer(nn.Module):
def __init__ (self, input_size, output_size):
super().__init__()
self.W = nn.Parameter(torch.zeros(input_size, output_size))
# kaiming initialization (use any other if you like)
self.W = nn.init.kaiming_normal_(self.W)
self.b = nn.Parameter(torch.ones(output_size))
def forward(self, x):
# applying sigmoid to weights and getting results
ret = torch.addmm(self.b, x, torch.sigmoid(self.W))
return ret 一旦你这样做了,你就可以像在代码中使用线性层一样使用它了。
https://stackoverflow.com/questions/56364712
复制相似问题