导包
import torch
import torch.nn as nn
# 大白话:RNN就像是你的大脑在看电影的过程中记住剧情
1. 创建 循环网络层
# 参1:词向量的维度;就像电影里每一帧画面有128个细节(比如:颜色,动作,表情),RNN(你的大脑)每次看到的就是这128个细节
# 参2:隐藏层状态向量维度;你的大脑能记住的剧情信息量有多大,比如说:记住角色的关系,前情提要。值越大,能存储的剧情记忆就越多
# 参3:隐藏层数量,默认是1;你的大脑只有1层来处理它。如果是1,说明2层大脑接力理解剧情,第1层处理,第二层深加工
rnn = nn.RNN(input_size=128,hidden_size=256,num_layers=1)
2. 定义变量,表示输入的X
# 参1:每个句子词的个数(长度),假设电影总共有 5 帧画面
# 参2:句子的数量 同时有32个人在看这5帧画面
# 参3:词向量的维度 每一帧画面的细节有128个
x = torch.randn(size=(5,32,128))
3. 定义变量,记录:上一时刻的隐藏状态
# 参1:隐藏层的层数 RNN的层数,和num_layers一样,1层大脑
# 参2:句子的数量 批量大小,和上述的X一样,32个人
# 参3:隐藏状态向量维度 和上述的hidden_size一样
h0 = torch.randn(size=(1,32,256))
4. 调用RNN处理,获取到当前时刻的预测值 和 当前的隐藏状态
# 参1:x,本次的输入;参2:h0,上一次的隐藏状态
# 返回值1 output:每个时间步的是输出,包含了所有时间步的隐藏状态.每看1帧画面,大脑能记住的剧情——>共5帧,32个人,256维
# 返回值2 h1:最后1个时间步的隐藏状态. 看完最后1帧画面后,大脑里的最新剧情记忆——>只关心最后1帧
output,h1 = rnn(x,h0)
print(f'output:{output}')
print(f'h1:{h1}')