PyTorch:重量的S型吗?

时间:2019-05-29 16:12:37

标签: python pytorch

我是神经网络/ PyTorch的新手。我正在尝试制作一个包含向量x的网络,第一层是h_j = w_j^T * x + b_j,输出是max_j{h_j}。唯一的事情是,我希望通过w_jw_j = S(k*a_j)限制在0和1之间,其中S是S型函数,k是一些常数,而{{1} }是实际的重量变量(a_j只是w_j的函数)。如何在PyTorch中做到这一点?我不能只使用a_j图层,权重的Sigmoid函数中还必须添加其他内容吗?

侧面问题,对于最后一个输出层,我是否可以仅使用torch.nn.Linear来获取上一层输出的最大值?这是否表现良好,或者是否存在一些torch.max或一些我不理解的需要合并的东西?

谢谢!

1 个答案:

答案 0 :(得分:0)

我真的不确定为什么要这样做,但是您可以如下声明一个自定义图层,以将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 

执行此操作后,就可以像在代码中使用线性图层一样使用它。