Как добавить скрытые нейроны в Pytorch RNN - PullRequest
0 голосов
/ 02 августа 2020

Как я могу добавить скрытые нейроны в рекуррентную нейронную сеть в pytorch? Насколько я понимаю, torch.nn.RNN имеет n нейронов, входы которых являются входом и скрытым состоянием, где n равно размеру скрытого состояния.

Как я могу добавить дополнительные слои перед нейронами go обратно в скрытое состояние? Например, если у меня только 1 вход и 1 выход, но я хочу иметь возможность моделировать более сложные функции?

Я пробовал использовать параметр num_layers, но это просто добавляет больше слоев одиночных нейронов. Я также пробовал использовать torch.nn.Sequential для объединения отдельных RNN с входами / выходами разного размера, но это не сработало, поскольку последовательные объекты, похоже, не проходят через дополнительные параметры (h0, начальное скрытое состояние).

Я пытаюсь для моделирования f (x) = sin (x) с начальным скрытым состоянием присвоить начальное значение синусоиды (sin (x_0)), входы - x, а выходы - sin (x).

1 Ответ

1 голос
/ 02 августа 2020

Вы не можете определить rnn без определения скрытых нейронов.

Давайте посмотрим на официальный пример:

class RNNTutorial(Module):
    def __init__(self, input_size, hidden_size,
                 output_size):
        super(RNNTutorial, self).__init__()
        self.hidden_size = hidden_size
        size_sum = input_size + hidden_size
        self.i2h = Linear(size_sum, hidden_size)
        self.i2o = Linear(size_sum, output_size)
        self.softmax = LogSoftmax(dim=1)

    def forward(self, input_, hidden_):
        combined = cat(tensors=(input_, hidden_), dim=1)
        hidden_ = self.i2h(input=combined)
        hidden_ = relu(hidden_)
        output = self.i2o(input=combined)
        output = self.softmax(input=output)
        return output, hidden_

    def init_hidden(self):
        return zeros(1, self.hidden_size)

Выше - двухслойная структура RNN . На 1-м слое

self.i2h = Linear(size_sum, hidden_size)

Размер скрытого нейрона на входе: size_sum и на выходе hidden_size

как добавить нейрон? Вы можете изменить значения параметров.

Например: size_sum + 1 теперь вы добавляете еще один скрытый нейрон.

...