【python】keras包:深度学习( RNN循环神经网络 Recurrent Neural Networks)

文章介绍了RNN(循环神经网络)的基本原理和应用场景,包括物体位置预测、股价预测和语言处理。它强调了RNN的顺序特性以及其在处理不定长序列数据上的能力。文章进一步探讨了RNN的改进版,如LSTM(长短期记忆网络)和BRNN(双向循环神经网络),以及如何使用它们来增强模型的记忆能力和预测准确性。此外,还提供了两个实战例子,一个是使用RNN进行股价预测,另一个是利用LSTM自动生成文本。
摘要由CSDN通过智能技术生成

RNN循环神经网络

应用:

物体移动位置预测、股价预测、序列文本生成、语言翻译、从语句中自动识别人名、
问题总结 这类问题,都需要通过历史数据,对未来数据进行预判

序列模型

两大特点

  1. 输入(输出)元素具有顺序关系,有前后关系
  2. 输入输出不定长。如:文章生成、聊天机器人

简单理解

在这里插入图片描述
以人名识别为例
在这里插入图片描述

常见结构

多输入单输出结构

eg. 自然语言文字的情感识别
输入:语句(文字为多个输入信息)
输出:情感判断(是积极的还是消极的)

单输入多输出结构

eg. (序列数据生成器)根据关键词生成文章、音乐等
输入:关键词(单维信息)
输出:文章(多元信息)

多输入多输出结构

eg. 语言翻译
输入:中文(n维数据)
输出:英文(m维数据)

普通RNN模型

越新的信息对结果的影响占比越大,越旧的信息对结果的影响占比越小
缺陷 : 可能导致重要的旧信息丢失(图中蓝色在y中的占比即表示旧信息在结果中的影响占比)
在这里插入图片描述

长短期记忆网络(LSTM)

算法逻辑:增加记忆细胞 C[i],以记忆重要信息
在这里插入图片描述

双向循环神经网络(BRNN)

简单理解 : 普通循环神经网络,只根据上文推测下文;双向循环神经网络,则是根据上文和下文来推测当前片段。

深层循环神经网络(DRNN)

简单理解 单层RNN+MLP,实现更好的拟合效果

实战一:RNN实现股价预测

算法效果

给定(数据-时间轴)数据集,
设定Input_shape = (samples, time_steps, features) ,
sample表示样本数量(默认为:根据输入数据自动计算)
time_steps表示每次用前time_steps个数据预测下一个数据
features 表示样本的特征维数
生成预测曲线

算法流程:

Step 1. 数据载入 与 预处理
序列切断:按time_steps的长度,对被预测数据进行切断

# 数据切断函数
import numpy as np
def extract_data(data,time_step):
    x=[] #前time_step个时间点的数据
    y=[] #当前被预测时间点的数据
    for i in range(len(data)-time_step):
        x.append( [a for a in data[i:i+time_step] ] )
        y.append( data[i+time_step] )
    x = np.array(x)
    x = x.reshape(x.shape[0],x.shape[1],1)
    y = np.array(y)
    return x,y
time_step = int(input("输入参考时间区间的长度:"))
x,y = extract_data(price_norm,time_step)
#print(x.shape)

Step 2. 建立RNN模型

from keras.models import Sequential
from keras.layers import Dense,SimpleRNN
#顺序模型
model = Sequential()
#RNN层
model.add( 
    SimpleRNN(
		units=5, #神经元个数
		input_shape = (time_step,1),
        # 输入格式:以前time_step为根据,预测当前位置
        # 数据维数为 1
		activation = 'relu',#  激活函数用relu
    )
)
#输出层
model.add(Dense(units=1,activation='linear'))
#参数设置
model.compile(
    optimizer='adam', 
    loss='mean_squared_error', #平方差
    metrics=['accuracy'] #这个模型看accuracy没有意义
)
model.summary()

Step 3. 预测

pred_y_train = model.predict(x) * max(price) #逆归一化
y_train = y*max(price)
#训练数据-预测训练数据预览
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(8,5))
truth, = plt.plot(y_train)
pred, = plt.plot(pred_y_train)
plt.title('close price')
plt.xlabel('date')
plt.ylabel('price')
plt.legend( (pred,truth), ('pred_line','true_line'))
plt.show()

实战二:LSTM自动生成文本

算法效果

给定(文本)数据集,
构建 (文本-编码)字典
输入 编码后的文本数据
生成预测文本的编码
编码转文本

算法流程

Step 1. 数据载入 与 预处理
导入文本数据 => 转化为one-hot标签形式

data = open('file_name').read()
#移除换行符号
data = data.replace('\n','').replace('\r','')
print(data)

#建立字典
letters = list(set(data)) #去除重复
print(letters)
print(len(letters))
int_to_char = {a:b for a,b in enumerate(letters) }#建立字典
print(int_to_char)

Step 2. 建立RNN模型
Step 3. 预测

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoesM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值