• pytorch笔记 GRUCELL


    1 介绍

    GRU的一个单元

    2 基本使用方法

    1. torch.nn.GRUCell(
    2. input_size,
    3. hidden_size,
    4. bias=True,
    5. device=None,
    6. dtype=None)

    输入:(batch,input_size) 

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

    3 举例

    1. import torch.nn as nn
    2. rnn = nn.GRUCell(input_size=5,hidden_size=10)
    3. input_x = torch.randn(3, 5)
    4. #batch,input_size
    5. h0 = torch.randn(3, 10)
    6. #batch,hidden_size
    7. output= rnn(input_x, h0)
    8. output.shape, output
    9. '''
    10. (torch.Size([3, 10]),
    11. tensor([[-0.4414, 1.0060, 0.3346, -0.2446, -0.4170, -0.6201, -1.0049, 0.1765,
    12. 0.2238, -2.0249],
    13. [ 0.2764, 0.6327, 0.1682, -0.0433, 1.2226, -1.0959, 0.0345, -0.6375,
    14. -1.4599, -0.3670],
    15. [ 0.9447, -0.0849, 0.3983, -0.4078, 0.9805, -0.1826, 0.2151, 0.3382,
    16. -0.1147, -0.2307]], grad_fn=))
    17. '''

    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

  • 相关阅读:
    UE 数据表 DataTable
    Docker部署单点Elasticsearch与Kibana
    SFI立昌STD系列方案与应用
    大数据-Storm流式框架(六)---Kafka介绍
    C++ Mysql对接实现登录注册
    Petalinux2022 qemu 退出
    『现学现忘』Docker基础 — 27、Docker镜像的commit操作
    MATLAB/Simulink 与Gazebo联合仿真
    Android逆向学习(五)app进行动态调试
    从 npm 切换到 pnpm,真香!
  • 原文地址:https://blog.csdn.net/qq_40206371/article/details/134170124