PyTorch: сигмоид веса? - PullRequest
       7

PyTorch: сигмоид веса?

1 голос
/ 29 мая 2019

Я новичок в нейронных сетях / PyTorch. Я пытаюсь создать сеть с вектором x, первый слой - h_j = w_j^T * x + b_j, вывод - max_j{h_j}. Единственное, что я хочу, чтобы w_j был ограничен от 0 до 1, имея w_j = S(k*a_j), где S - сигмовидная функция, k - некоторая константа, а a_j - фактические весовые переменные (w_j - это просто функция a_j). Как мне сделать это в PyTorch? Я не могу просто использовать слой torch.nn.Linear, должно быть что-то еще / дополнительное, чтобы добавить в сигмовидную функцию на весах?

Дополнительный вопрос, для этого последнего выходного слоя, могу ли я просто использовать torch.max, чтобы получить максимум выходов предыдущего слоя? Это ведет себя хорошо, или есть какие-то torch.nn.Max или какие-то вещи, которые я не понимаю, которые должны произойти?

Спасибо!

1 Ответ

1 голос
/ 29 мая 2019

Я действительно не уверен, зачем вам это делать, но вы можете объявить пользовательский слой, как показано ниже, чтобы применить сигмоид к весам.

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 

Как только вы это сделаете, вы можете использовать это так же, как если бы вы использовали линейный слой в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...