深度学习之RNN

pytorch官方文档链接:RNN — PyTorch 1.13 documentation 

RNN被用于处理序列数据:

RNN cell:

 cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size)中:

  • input_size:x(t)的维度
  • hidden_size:h(t-1)的维度

 假设我们有一个序列具有如下属性:

  • batchSize = 1
  • seqLen = 3
  • inputSize = 4
  • hiddenSize = 2

序列通过shape变形成一个张量:𝑑𝑎𝑡𝑎𝑠𝑒𝑡. 𝑠ℎ𝑎𝑝𝑒 =(𝒔𝒆𝒒𝑳𝒆𝒏, 𝒃𝒂𝒕𝒄𝒉𝑺𝒊𝒛𝒆, 𝒊𝒏𝒑𝒖𝒕𝑺𝒊𝒛𝒆)

 由序列生成序列:

 num_layers:RNN模型的层数。如下图,num_layers = 3

 batch_first参数:

接下来是一个例子:sequence to sequence

 先将序列转化为数字向量,在传进RNNCell:

 RNN的output应该是预测的向量

 直接上代码,注释里有思路

import torch

# 参数表
input_size = 4
hidden_size = 4
batch_size = 1
seq_len = 5

# 构建字典,将序列转换为数字向量
idx2char = ['e', 'h', 'l', 'o']
x_data = [1, 0, 2, 2, 3]  # input
y_data = [3, 1, 2, 3, 2]  # output

one_hot_lookup = [[1, 0, 0, 0],
                  [0, 1, 0, 0],
                  [0, 0, 1, 0],
                  [0, 0, 0, 1]]
x_one_hot = [one_hot_lookup[x] for x in x_data]  # 将索引转换为one_hot向量


# 将inputs重塑为(seq_len, batch_size, input_size)
inputs = torch.Tensor(x_one_hot).view(-1, batch_size, input_size)
# 将labels重塑为(seq_len, 1)
labels = torch.LongTensor(y_data).view(-1, 1)


class Model(torch.nn.Module):
    def __init__(self, input_size, hidden_size, batch_size):
        super(Model, self).__init__()
        # 初始化参数
        self.batch_size = batch_size
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.rnncell = torch.nn.RNNCell(input_size=self.input_size,
                                        hidden_size=self.hidden_size)

    def
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值