RNN-循环神经网络

wang 发布于 2024-12-18 9609 次阅读


专门处理序列数据的神经网络

序列数据: 前后语义关联

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]

输出层

输出预测结果....(更新中)

一名热爱海贼的AI开发者
最后更新于 2026-01-27