pytorch笔记 GRUCELL

1 介绍

GRU的一个单元

2 基本使用方法

torch.nn.GRUCell(
    input_size, 
    hidden_size, 
    bias=True, 
    device=None, 
    dtype=None)

输入:(batch,input_size) 

输出和隐藏层:(batch,hidden_size)

3 举例

import torch.nn as nn

rnn = nn.GRUCell(input_size=5,hidden_size=10)

input_x = torch.randn(3, 5)
#batch,input_size

h0 = torch.randn(3, 10)
#batch,hidden_size

output= rnn(input_x, h0)
output.shape, output
'''
(torch.Size([3, 10]),
 tensor([[-0.4414,  1.0060,  0.3346, -0.2446, -0.4170, -0.6201, -1.0049,  0.1765,
           0.2238, -2.0249],
         [ 0.2764,  0.6327,  0.1682, -0.0433,  1.2226, -1.0959,  0.0345, -0.6375,
          -1.4599, -0.3670],
         [ 0.9447, -0.0849,  0.3983, -0.4078,  0.9805, -0.1826,  0.2151,  0.3382,
          -0.1147, -0.2307]], grad_fn=<AddBackward0>))
'''

4 和GRU的异同

功能性
  • GRU: 它是一个完整的循环层,可以处理整个序列的输入,并一次性返回整个序列的输出。
  • GRUCell: 它处理单个时间步长的输入,并返回单个时间步长的输出。它更为基础,通常在你想自定义循环过程时使用。
输入:
  • GRU: 期望的输入形状为 (seq_len, batch, input_size)(如果 batch_first=True,则为 (batch, seq_len, input_size))。
  • GRUCell: 期望的输入形状为 (batch, input_size)
输出:
  • GRU: 它返回两个输出 —— 整个序列的输出和最后一个时间步长的隐藏状态。输出的形状为 (seq_len, batch, hidden_size)(num_layers * num_directions, batch, hidden_size)
  • GRUCell: 它只返回下一个时间步长的隐藏状态,其形状为 (batch, hidden_size)
用法:
  • 使用 GRU 时,你可以一次性将整个序列传入,而不需要自己编写循环。
  • 使用 GRUCell 时,你需要手动编写循环,以一个时间步长为单位处理输入。
应用场景:
  • GRU: 当你想使用标准的循环过程处理整个序列时,通常使用GRU。
  • GRUCell: 当你想自定义循环过程或有特定的需求时使用,例如混合不同类型的RNN单元或在循环中执行特定操作。

5 一个GRU由几个GRUcell组成?

一个具有 seq_lenbidirectional=True 和指定的 num_layers 的 GRU 对应的 GRUCell 的数量为:

  1. seq_len:对于长度为 seq_len 的输入序列,GRU 在内部会进行 seq_len 次循环操作,每次循环处理序列中的一个时间步长。所以这部分会贡献 seq_len 个 GRUCell。

  2. bidirectional=True:当 GRU 是双向的,即 bidirectional=True,那么对于每一个时间步长,都会有两个 GRUCell 被调用:一个是正向的,另一个是反向的。因此,双向性将 GRUCell 的数量增加一倍。

  3. num_layers:这表示你要堆叠多少层的 GRU。每一层都会为每个时间步调用其自己的 GRUCell(考虑到双向性,这可能是两个)。所以如果你有 num_layers 层,那么你需要乘以这个数字。

综上所述,总的 GRUCell 的数量为: Total GRUCells=seq_len×(2 if bidirectional else 1)×num_layers

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值