Spec-Zone.ru › PyTorch 1

GRU

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

Применяет многослойный рекуррентный блок GRU (gated recurrent unit) к последовательности входных данных.

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

rt=σ(Wirxt+bir+Whrh(t−1)+bhr)zt=σ(Wizxt+biz+Whzh(t−1)+bhz)nt=tanh⁡(Winxt+bin+rt∗(Whnh(t−1)+bhn))ht=(1−zt)∗nt+zt∗h(t−1)\begin{array}{ll} r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr} h_{(t-1)} + b_{hr}) \\ z_t = \sigma(W_{iz} x_t + b_{iz} + W_{hz} h_{(t-1)} + b_{hz}) \\ n_t = \tanh(W_{in} x_t + b_{in} + r_t * (W_{hn} h_{(t-1)}+ b_{hn})) \\ h_t = (1 - z_t) * n_t + z_t * h_{(t-1)} \end{array}

где hth_t — скрытое состояние во времени t, xtx_t — вход во времени t, h(t−1)h_{(t-1)} — скрытое состояние слоя во времени t-1 или начальное скрытое состояние во времени 0, а rtr_t, ztz_t, ntn_t — это, соответственно, ворота сброса, обновления и нового состояния. σ\sigma — сигмоидальная функция, а ∗* — произведение Адамара.

В многослойном блоке GRU вход xt(l)x^{(l)}_t ll-го слоя (l>=2l >= 2) — это скрытое состояние ht(l−1)h^{(l-1)}_t предыдущего слоя, умноженного на значение дропаута δt(l−1)\delta^{(l-1)}_t, где каждое δt(l−1)\delta^{(l-1)}_t — случайная величина Бернулли, которая равна 00 с вероятностью dropout.

Параметры:
  • input_size – Количество ожидаемых признаков в входных данных x
  • hidden_size – Количество признаков в скрытом состоянии h
  • num_layers – Количество рекуррентных слоёв. Например, установка num_layers=2 означает объединение двух блоков GRU для формирования stacked GRU, где второй блок GRU принимает на вход выходные данные первого блока GRU и вычисляет конечные результаты. По умолчанию: 1
  • bias – Если False, то слой не использует весы смещения b_ih и b_hh. По умолчанию: True
  • batch_first – Если True, то тензоры входных и выходных данных предоставляются как (batch, seq, feature) вместо (seq, batch, feature). Обратите внимание, что это не относится к скрытым или ячейкам состояния. Подробности см. в разделах «Входы/Выходы» ниже. По умолчанию: False
  • dropout – Если не равно нулю, вводит слой Dropout на выходах каждого слоя GRU, кроме последнего слоя, с вероятностью дропаута, равной dropout. По умолчанию: 0
  • bidirectional – Если True, становится двунаправленным блоком GRU. По умолчанию: False
END_OF_DOCUMENT_MARKER
Входы: input, h_0
  • input: тензор формы (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}
Выходы: output, h_n
  • output: тензор формы (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) из последнего слоя GRU для каждой 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] – обученные веса вход-скрытое для kth\text{k}^{th} слоя (W_ir|W_iz|W_in), формы (3*hidden_size, input_size) для k = 0. Иначе, форма (3*hidden_size, num_directions * hidden_size)
  • weight_hh_l[k] – обученные веса скрытое-скрытое для kth\text{k}^{th} слоя (W_hr|W_hz|W_hn), формы (3*hidden_size, hidden_size)
  • bias_ih_l[k] – обученный смещение вход-скрытое для kth\text{k}^{th} слоя (b_ir|b_iz|b_in), формы (3*hidden_size)
  • bias_hh_l[k] – обученное смещение скрытое-скрытое для kth\text{k}^{th} слоя (b_hr|b_hz|b_hn), формы (3*hidden_size)

Примечание

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

Примечание

Для двунаправленных GRU, направление вперед и назад – 0 и 1 соответственно. Пример разделения выходных слоев, когда batch_first=False: output.view(seq_len, batch, num_directions, hidden_size).

Примечание

Аргумент batch_first игнорируется для неразмеченных входных данных.

Примечание

Если выполняются следующие условия: 1) cudnn включен, 2) данные ввода находятся на графическом процессоре, 3) тип данных входных данных torch.float16, 4) используется графический процессор V100, 5) входные данные не в формате PackedSequence, может быть выбран алгоритм сохранения для повышения производительности.

Примеры:

>>> rnn = nn.GRU(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.GRU.html

Spec-Zone.ru

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