专门处理序列数据的神经网络
序列数据: 前后语义关联
RNN的应用:
自然语言处理(NLP): 文本--AIGC--> 文本、建模、翻译、情感分析等。
时间序列预测:股市、气象传感器等
语音识别:语音 --to--> text
音乐生成:通过学习音乐的时序模式 ----> 新歌曲
词嵌入层-Embeding(文本--to-->向量矩阵)
作用:输入表示、降低维度 捕捉语义相似性 构建为 向量矩阵
工作流程
加载词(初始化词向量) ---->分词转索引( 输入索引)----->索引映射词向量(找词向量)------>输入到RNN,RNN根据上下文生成一个序列输出(输入到RNN)
import torch
import torch.nn as nn
import jieba
data = '北京冬奥的进度条已经过半,不要外国运动员在王城自己的比赛后踏上归途'
words = list(set(jieba.lcut(data)))
embed = nn.Embedding(len(words),5)
for i,word in enumerate(words):
print(i,word)
word_to_vec = embed(torch.tensor([i]))
print(word_to_vec)
循环网络层
作用:类似ANN的隐藏层,基于上文 推理下文
创建步骤
# 导包
import torch
import torch.nn as nn
# 1. 创建循环网络层
# 参1: 输入数据的维度, 参2: 输出的维度, 参3: 隐藏层的层数(默认是1)
rnn = nn.RNN(128, 256, 1)
# 2. 定义变量x, 表示: 本次的输入.
# 参1: 句子的长度(即: 每个句子切词后有几个词), 参2: 批次大小(即: 有多少个句子), 参3: 词向量的维度(即: 用多少个数字表示1个词)
x = torch.randn(size=(5, 32, 128))
# 3. 定义变量h0, 表示: 记录上一时刻的隐藏状态.
# 参1: 隐藏层的层数(默认是1), 参2: 批次大小(即: 有多少个句子), 参3: 隐藏层的维度(即: 输出的维度)
h0 = torch.randn(size=(1, 32, 256))
# 4. 通过RNN处理数据.
y, h1 = rnn(x, h0)
# 5. 打印结果.
print(f'y: {y.shape}') # [5, 32, 256]
print(f'h1: {h1.shape}') # [1, 32, 256]
输出层
输出预测结果....(更新中)
Comments NOTHING