RNN
-
class torch.nn.RNN(self, input_size, hidden_size, num_layers=1, nonlinearity='tanh', bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)[source] -
Применяет многослойный RNN Эльмана с нелинейностью или к последовательности входных данных.
Для каждого элемента в последовательности входных данных каждый слой вычисляет следующую функцию:
где — скрытое состояние во временной точке
t, — входные данные во временной точкеt, а — скрытое состояние предыдущего слоя во временной точкеt-1или начальное скрытое состояние во временной точке0. Еслиnonlinearityравно'relu', используется вместо .- Параметры
-
-
input_size – Количество ожидаемых признаков на входе
x -
hidden_size – Количество признаков в скрытом состоянии
h -
num_layers – Количество рекуррентных слоев. Например, установка
num_layers=2означает объединение двух RNN для созданияstacked RNN, где второй RNN принимает на вход выходные данные первого RNN и вычисляет конечные результаты. По умолчанию: 1 -
nonlinearity – Нелинейность для использования. Может быть либо
'tanh'или'relu'. По умолчанию:'tanh' -
bias – Если
False, слой не использует веса смещенияb_ihиb_hh. По умолчанию:True -
batch_first – Если
True, входные и выходные тензоры предоставляются как(batch, seq, feature), а не как(seq, batch, feature). Обратите внимание, что это не относится к скрытым или ячейковым состояниям. Подробности см. в разделах Входные данные/Выходные данные ниже. По умолчанию:False -
dropout – Если не равно нулю, вводит слой
Dropoutна выходах каждого слоя RNN, кроме последнего, с вероятностью дропаута, равнойdropout. По умолчанию: 0 -
bidirectional – Если
True, становится двунаправленным RNN. По умолчанию:False
-
input_size – Количество ожидаемых признаков на входе
- Входы: вход, h_0
-
-
вход: тензор формы для неразобранного входного сигнала, при
batch_first=Falseили приbatch_first=Trueсодержащем признаки входной последовательности. Вход также может быть упакованной последовательностью переменной длины. См.torch.nn.utils.rnn.pack_padded_sequence()илиtorch.nn.utils.rnn.pack_sequence()для получения подробностей. - h_0: тензор формы для неразобранного входного сигнала или содержащий начальное скрытое состояние для пакетного входного сигнала. По умолчанию равен нулю, если не указано.
где:
-
вход: тензор формы для неразобранного входного сигнала, при
- Выходы: выход, h_n
-
-
выход: тензор формы для неразобранного входного сигнала, при
batch_first=Falseили приbatch_first=Trueсодержащий выходные признаки(h_t)из последнего слоя RNN для каждогоt. Если в качестве входного значения был переданtorch.nn.utils.rnn.PackedSequence, выход также будет упакованной последовательностью. - h_n: тензор формы для неразобранного входного сигнала или содержащий конечное скрытое состояние для каждого элемента в пакете.
-
выход: тензор формы для неразобранного входного сигнала, при
- Переменные
-
-
weight_ih_l[k] – обучаемые веса вход-скрытое k-го слоя, формы
(hidden_size, input_size)дляk = 0. В противном случае форма(hidden_size, num_directions * hidden_size) -
weight_hh_l[k] – обучаемые веса скрытое-скрытое k-го слоя, формы
(hidden_size, hidden_size) -
bias_ih_l[k] – обучаемый смещение вход-скрытое k-го слоя, формы
(hidden_size) -
bias_hh_l[k] – обучаемый смещение скрытое-скрытое k-го слоя, формы
(hidden_size)
-
weight_ih_l[k] – обучаемые веса вход-скрытое k-го слоя, формы
Примечание
Все веса и смещения инициализируются из , где
Примечание
Для двунаправленных RNN, направления вперед и назад соответственно 0 и 1. Пример разделения выходных слоев, когда
batch_first=False:output.view(seq_len, batch, num_directions, hidden_size).Примечание
Аргумент
batch_firstигнорируется для неразобранных входов.Предупреждение
Известны проблемы с недетерминизмом для функций RNN на некоторых версиях cuDNN и CUDA. Можно обеспечить детерминированное поведение, задав следующие переменные окружения:
На CUDA 10.1 установите переменную окружения
CUDA_LAUNCH_BLOCKING=1. Это может повлиять на производительность.На CUDA 10.2 или более поздних версиях установите переменную окружения (обратите внимание на ведущий символ двоеточия)
CUBLAS_WORKSPACE_CONFIG=:16:8илиCUBLAS_WORKSPACE_CONFIG=:4096:2.Для получения дополнительной информации см. cuDNN 8 Release Notes.
Примечание
Если выполнены следующие условия: 1) cudnn включен, 2) данные входного сигнала находятся на GPU, 3) тип данных входного сигнала
torch.float16, 4) используется GPU V100, 5) данные входного сигнала не в форматеPackedSequence, можно выбрать алгоритм персистентности для повышения производительности.Примеры:
>>> rnn = nn.RNN(10, 20, 2) >>> input = torch.randn(5, 3, 10) >>> h0 = torch.randn(2, 3, 20) >>> output, hn = rnn(input, h0)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.RNN.html