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

0 写在前面

  • 之前的卷积神经网络受到了生物视觉细胞的启发,相似的,循环神经网络受到了生物记忆能力的启发。

1 RNN 简单描述

  1. 普通神经网络和循环神经网络
    在这里插入图片描述
  • 普通神经网络:输入层 x x x 经过隐含层之后输出 y y y
  • 循环神经网络:输入层 x x x 经过隐含层之后输出的数据 h h h 还要作为下一次输入的部分,循环传递

2 RNN 的数学表达

在这里插入图片描述

  • 首先初始化一个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,说白了相当于一个线性层。
    在这里插入图片描述

3 设计输入输出的size

  • 假设batch_size=1seqlen=3input_size=4hidden_size=2
  • 那么输入的Tensor的形状:input.shape=(batch_size,input_size)
  • 输出的Tensor的形状:output.shape=(batch_size,hidden_size)
    在这里插入图片描述

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) 

在这里插入图片描述

  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)

在这里插入图片描述

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

5 举例——hello转换为

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值