PyTorch实现RNN(两种构造RNN的方式;序列到序列的训练)

本文介绍了在PyTorch中实现RNN的两种方法,包括自定义RNNCell和直接使用RNN模块。通过示例代码详细阐述了每种方法的使用,并展示了如何训练一个模型完成“hello”到“ohlol”的序列到序列学习任务。文章强调了输入和隐藏状态的维度管理以及参数设置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RNN pytorch

在PyTorch中有两种构造RNN的方式:一种是构造RNNCell,然后自己写循环;一种是直接构造RNN。

第一种:构造RNNCell,然后自己写循环

  • 构造RNNCell

    需要两个参数:input_size和hidden_size。

    cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size)
    
  • 使用RNNCell

    hidden = cell(input, hidden)
    

    调用时,将当前输入input和上一层的输出hidden。这些数据要满足以下条件:

    • input:batch_size*input_size
    • 输入的hidden: batch_size*hidden_size
    • 输出的hidden: batch_size*hidden_size

    注意:dataset的形式是seg_len*batch_size*hidden_size,序列长度放在第一个参数。因为每次是从dataset中拿出一个序列,即batch_size*input_size。

  • 示例代码(看维度)

    import torch
    
    batch_size = 1
    seq_len = 3
    input_size = 4
    hidden_size = 2
    
    cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size)
    
    dataset = torch.randn(seq_len, batch_size, input_size)
    hidden = torch.zeros(batch_size, hidden_size)
    
    for idx, input in enumerate(dataset):
        print('=' * 20, idx, '='*20)
        print('Input size:', input.shape)
    
        hidden = cell(input, hidden)
    
        print('output size:', hidden.shape)
        print(hidden)
    

第二种:直接使用RNN

  • 注意几点:

  1. 增加参数num_layers,表示有多少层(上图所示只有1层)。
  2. 上图所示为1层,一层包含若干个RNN Cell。
  3. inputs指的是 x1,x2,x3,…,xNx_1, x_2, x_3, …, x_Nx1,x2,x3,<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值