torch.nn中GRU使用

一、pytorch中GRU实现原理:

对于输入序列中的每个元素,每层计算以下函数:
r t = σ ( W i r x t + b i r + W h r h ( t − 1 ) + b h r ) r_t=\sigma(W_{ir}x_t + b_{ir} + W_{hr}h_{(t-1)} + b_{hr}) rt=σ(Wirxt+bir+Whrh(t1)+bhr)
z t = σ ( W i z x t + b i z + W h z h ( t − 1 ) + b h z ) z_t=\sigma(W_{iz}x_t + b_{iz} + W_{hz}h_{(t-1)} + b_{hz}) zt=σ(Wizxt+biz+Whzh(t1)+bhz)
n t = t a n h ( W i n x t + b i n + r t ∗ ( W h n h ( t − 1 ) ) + b h n ) n_t=tanh(W_{in}x_t + b_{in} +r_t*(W_{hn}h_{(t-1)}) + b_{hn}) nt=tanh(Winxt+bin+rt(Whnh(t1))+bhn)
h t = ( 1 − z t ) ∗ n t + z ∗ h ( t − 1 ) h_t=(1-z_t)*n_t + z*h_{(t-1)} ht=(1zt)nt+zh(t1)
其中各个变量的含义如下:

  • h t h_t ht:是在t时间步的hidden state
  • x t x_t xt:是在t时间步的输入
  • h ( t − 1 ) h_{(t-1)} h(t1):是上个时间步的hidden state 或者 初始化的hidden state
  • r t r_t rt z t z_t zt是 重置门,更新门
    在这里插入图片描述
二、参数
1.初始化参数
  • input_size:输入x的 维度
  • hidden_size:hidden state 的维度
  • num_layers:GRU堆叠层数,设置num_layers=2 的话,表示堆叠两层GRU到一起,第二个 GRU 接收第一个 GRU的输出并计算最终结果;默认为1
  • bias:如果是False,将不再加入 b_ih和b_hh,默认为True
  • batch_first:如果为True,则输入和输出的tensors的维度为(batch,seq,feature)而不是(seq,batch,feature)。注意:此标识只对output有效,对hidden state 和 cell state无效,默认为False
  • dorpout:如果为非0,在每个 GRU 层(最后一层除外)的输出上引入一个dropout层,dropout概率等于此参数值。默认值:0,只对多层GRU有效。
  • bidirectional:如果为True,则是双向GRU,默认为False
2.forward入参
  • input:单个样本(unbatched)输入,则形状为 ( L , H i n ) (L, H_{in}) (L,Hin);batch_first=False则输入的形状为 ( L , N , H i n ) (L,N,H_{in}) (L,N,Hin);当batch_first=True时,形状为 ( N , L , H i n ) (N,L,H_{in}) (N,L,Hin),输入也可以是打包的可变长度序列。
  • h_0:单个样本(unbatched)输入,形状为 ( D ∗ n u m l a y e r s , H o u t ) (D*num_layers, H_out) (Dnumlayers,Hout);batch样本输入,则形状为 ( D ∗ n u m l a y e r s , N , H o u t ) (D*num_layers, N, H_out) (Dnumlayers,N,Hout)也就是初始化的hidden state.
    其中:
  • N=batch size
  • L=sequence length
  • D=2 if bidirectional=True otherwise 1
  • H i n H_{in} Hin=input_size
  • H o u t H_{out} Hout=hidden_size
3.输出
  • output:单个样本(unbatched)输入,则形状为 ( L , D ∗ H o u t ) (L, D*H_{out}) (L,DHout);batch_first=False,则形状为 ( L , N , D ∗ H o u t ) (L,N,D*H_{out}) (L,N,DHout);batch_first=True,则形状为 ( N , L , D ∗ H o u t ) (N,L,D*H_{out}) (N,L,DHout)。输入也可以是打包的可变长度序列。参考packedtorch.nn.utils.rnn.pack_padded_sequence() h或者torch.nn.utils.rnn.pack_sequence() 方法。
  • h_0:单个样本(unbatched)输入,形状为 ( D ∗ n u m l a y e r s , H o u t ) (D*num_layers, H_out) (Dnumlayers,Hout);batch样本输入,则形状为 ( D ∗ n u m l a y e r s , N , H o u t ) (D*num_layers, N, H_out) (Dnumlayers,N,Hout),包含序列中每个元素的最终隐藏状态。当双向 = True 时,h_n将分别包含最终正向和反向隐藏状态的串联。
三、实例
rnn = nn.GRU(10, 20, 2)# embedding_size, hidden_size, num_layer
input = torch.randn(5, 3, 10)# sequence length, batch size, embedding_size
h0 = torch.randn(2, 3, 20)# num_layer*dirc, batch size, hidden_size
output, hn = rnn(input, h0)
output.shape
torch.Size([5, 3, 20])# sequence length, batch size, hidden_size
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`torch.nn.GRU` 是 PyTorch 的一个循环神经网络(Recurrent Neural Network, RNN)模块,用于实现长短期记忆(Gated Recurrent Unit, GRU)模型。 GRU 是一种常用的循环神经网络模型,它通过门控机制来控制信息的流动和记忆。与传统的循环神经网络相比,GRU 具有更强的建模能力和更好的梯度传播性质。 可以通过创建 `torch.nn.GRU` 的实例来使用 GRU 模型。下面是一个简单的示例代码: ```python import torch import torch.nn as nn input_size = 100 hidden_size = 50 num_layers = 2 # 创建一个 GRU 模型 gru = nn.GRU(input_size, hidden_size, num_layers) # 定义输入数据 input = torch.randn(10, 32, input_size) # 输入序列长度为 10,批次大小为 32 # 初始化隐藏状态 h0 = torch.randn(num_layers, 32, hidden_size) # 隐藏状态的形状为 (num_layers, batch_size, hidden_size) # 前向传播 output, hn = gru(input, h0) ``` 在上述代码,我们首先创建了一个 `nn.GRU` 的实例 `gru`,并指定了输入大小 `input_size`、隐藏状态大小 `hidden_size` 和堆叠层数 `num_layers`。然后,我们定义了一个大小为 10x32x100 的输入张量 `input`,其 10 表示序列长度,32 表示批次大小,100 表示输入特征维度。接下来,我们初始化了隐藏状态 `h0`,其形状为 (2, 32, 50)。最后,我们通过调用 `gru` 对输入进行前向传播,得到输出 `output` 和最后一个时间步的隐藏状态 `hn`。 `torch.nn.GRU` 还提供了许多其他的参数和方法,如双向 GRU、批次优先模式、自定义初始权重等。通过这些功能,我们可以方便地构建和训练 GRU 模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值