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