Spec-Zone.ru › PyTorch 1

RNN

class torch.nn.RNN(*args, **kwargs) [source]

Применяет многослойный рекуррентный нейронную сеть Elman с нелинейностью tanh⁡\tanh или ReLU\text{ReLU} к последовательности входных данных.

Для каждого элемента во входной последовательности каждый слой вычисляет следующую функцию:

ht=tanh⁡(xtWihT+bih+ht−1WhhT+bhh)h_t = \tanh(x_t W_{ih}^T + b_{ih} + h_{t-1}W_{hh}^T + b_{hh})

где hth_t — скрытое состояние во время t, xtx_t — входной сигнал во время t, и h(t−1)h_{(t-1)} — скрытое состояние предыдущего слоя во время t-1 или начальное скрытое состояние во время 0. Если nonlinearity равно 'relu', то используется ReLU\text{ReLU} вместо tanh⁡\tanh.

Параметры:
  • 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
END_OF_DOCUMENT_MARKER
Входы: вход, h_0
  • вход: тензор формы (L,Hin)(L, H_{in}) для невложеного входа, (L,N,Hin)(L, N, H_{in}) при batch_first=False или (N,L,Hin)(N, L, H_{in}) при batch_first=True , содержащий признаки входной последовательности. Вход также может быть упакованной последовательностью переменной длины. См. torch.nn.utils.rnn.pack_padded_sequence() или torch.nn.utils.rnn.pack_sequence() для получения подробностей.
  • h_0: тензор формы (D∗num_layers,Hout)(D * \text{num\_layers}, H_{out}) для невложеного входа или (D∗num_layers,N,Hout)(D * \text{num\_layers}, N, H_{out}) , содержащий начальное скрытое состояние для входной последовательности пакета. По умолчанию равен нулям, если не указано.

где:

N=размер пакетаL=длина последовательностиD=2 если bidirectional=True в противном случае 1Hin=input_sizeHout=hidden_size\begin{aligned} N ={} & \text{batch size} \\ L ={} & \text{sequence length} \\ D ={} & 2 \text{ if bidirectional=True otherwise } 1 \\ H_{in} ={} & \text{input\_size} \\ H_{out} ={} & \text{hidden\_size} \end{aligned}
Выходы: выход, h_n
  • выход: тензор формы (L,D∗Hout)(L, D * H_{out}) для невложеного входа, (L,N,D∗Hout)(L, N, D * H_{out}) при batch_first=False или (N,L,D∗Hout)(N, L, D * H_{out}) при batch_first=True , содержащий выходные признаки (h_t) из последнего слоя RNN для каждого t. Если в качестве входного значения был передан torch.nn.utils.rnn.PackedSequence, выход также будет упакованной последовательностью.
  • h_n: тензор формы (D∗num_layers,Hout)(D * \text{num\_layers}, H_{out}) для невложеного входа или (D∗num_layers,N,Hout)(D * \text{num\_layers}, N, H_{out}) , содержащий конечное скрытое состояние для каждого элемента в пакете.
Переменные:
  • 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)

Примечание

Все веса и смещения инициализированы из U(−k,k)\mathcal{U}(-\sqrt{k}, \sqrt{k}), где k=1hidden_sizek = \frac{1}{\text{hidden\_size}}

Примечание

Для двунаправленных 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/1.13/generated/torch.nn.RNN.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API