PyTorch深度学习实践(十二)——序列转序列模型

0 写在前面

  • 以前的卷积神经网络受到生物视觉细胞的启发,同样,循环神经网络受到生物记忆能力的启发。

1 RNN 简单描述

  1. 普通神经网络和循环神经网络
    PyTorch深度学习实践(十二)——序列转序列模型
  • 普通神经网络:输入层PyTorch深度学习实践(十二)——序列转序列模型经过隐藏层再输出PyTorch深度学习实践(十二)——序列转序列模型
  • 循环神经网络:输入层PyTorch深度学习实践(十二)——序列转序列模型输出数据PyTorch深度学习实践(十二)——序列转序列模型经过隐藏层后也作为下一个输入的一部分,循环传输

2 RNN 的数学表达

PyTorch深度学习实践(十二)——序列转序列模型

  • 首先初始化一个RNN单元,该单元的输入特征维度5,隐藏向量的特征维度7
import torch
from torch import nn
rnn_cell = nn.RNNCell(input_size=5, hidden_size=7)

rnn_cell
RNNCell(5, 7)
  • 将前一时刻输出的隐藏向量,和该时刻的输入向量进行线性边变换并相加,然后经过非线性层(这里用的是tanh函数),得到该时刻的隐藏向量。
  • 所以说,确定一个RNN_cell需要一个input_size,需要一个hidden_size,
    说白了,就相当于一个线性层。
    PyTorch深度学习实践(十二)——序列转序列模型

3 设计输入输出的size

  • 假设 batch_size=1 , seqlen=3 , input_size=4 , hidden_size=2
  • 那么输入的Tensor的形状: input.shape=(batch_size,input_size)
  • 输出的Tensor的形状: output.shape=(batch_size,hidden_size)
    PyTorch深度学习实践(十二)——序列转序列模型

4 RNNcell 与 RNN

  • RNNCell在处理一个序列的输入向量时,必须采用循环的方式逐个向量进行输入;
  • 而PyTorch中定义了一个RNN模块,可以直接将序列当成输入。
  1. RNNCell 代码
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)

#(seq, batch, features)
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('outputs size ', hidden_size)
    print(hidden) 

PyTorch深度学习实践(十二)——序列转序列模型

  1. RNN 代码
import torch

batch_size = 1
seq_len = 3
input_size = 4
hidden_size = 2
num_layers = 1

cell = torch.nn.RNN(input_size=input_size, hidden_size=hidden_size,
                    num_layers=num_layers, batch_first=True)

# (seq, batch, features)
inputs = torch.randn(batch_size, seq_len, input_size)
hidden = torch.zeros(num_layers, batch_size, hidden_size)

out, hidden = cell(inputs, hidden)

print('Output size: ', out.shape)
print('Output: ', out)
print('Hidden size: ', hidden_size)
print('Hidden: ', hidden)

PyTorch深度学习实践(十二)——序列转序列模型

  • 总结:RNN和RNNCell的区别在于:RNN可以同时处理一串序列,并且同时返回输出向量序列和隐藏向量。

5 举例——hello转换为

PyTorch深度学习实践(十二)——序列转序列模型

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年4月2日
下一篇 2022年4月2日

相关推荐