torch.nn.GRU使用详解

torch.nn.GRU
输入:
(input_dim ,hidden_dim ,num_layers ,…)
– input_dim 表示输入的特征维度
– hidden_dim 表示输出的特征维度,如果没有特殊变化,相当于out
– num_layers 表示网络的层数
– nonlinearity 表示选用的非线性**函数,默认是 ‘tanh’
– bias 表示是否使用偏置,默认使用
– batch_first 表示输入数据的形式,默认是 False,[即(序列长度seq,批大小batch,特征维度feature)];若True则(batch,seq,feature)
– dropout 缺省值为0,表示不使用dropout层;若为1,则除最后一层外,其它层的输出都会加dropout层
– bidirectional 表示是否使用双向的 rnn,默认是 False
输出:out和 ht
out的输出维度:[seq_len,batch_size,output_dim]
ht的维度:[num_layers * num_directions, batch_size, hidden_size],num_directions=1,单向,取值2时为双向,num_layers为层数
out[-1]=ht[-1]

GRU公式:
在这里插入图片描述

举例:

import torch
import torch.nn as nn


# 例子1,单向一层网络
embed = nn.Embedding(3, 50) #一共3个词,每个词的词向量维度设置为50维
x = torch.LongTensor([[0, 1, 2]]) # 3个句子,每个句子只有一个词,对应的索引分别时0,1,2
x_embed = embed(x)
print(x_embed.size())
# torch.Size([1, 3, 50]) # [规整后的句子长度,样本个数(batch_size),词向量维度]

gru = nn.GRU(input_size=50, hidden_size=50) # 词向量维度,隐藏层维度
out, hidden = gru(x_embed)

print(out.size())
# torch.Size([1, 3, 50]) # [seq_len,batch_size,output_dim]

print(hidden.size())
# torch.Size([1, 1, 50]) # [num_layers * num_directions, batch_size, hidden_size]


# 例子2,单向2层网络
gru_seq = nn.GRU(10, 20,2) # x_dim,h_dim,layer_num
gru_input = torch.randn(3, 32, 10) # seq_len,batch_size,x_dim
out, h = gru_seq(gru_input)
print(out.size())
print(h.size())

'''
torch.Size([3, 32, 20]) # [seq_len,batch_size,output_dim]
torch.Size([2, 32, 20]) # [num_layers * num_directions, batch_size, hidden_size]

'''


参考资料:
torch.nn.GRU()函数解读
Pytorch中LSTM,GRU参数理解
【pytorch】关于Embedding和GRU、LSTM的使用详解

  • 22
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
`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 模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值