【深度学习】——循环神经网络RNN及实例气温预测、单层lstm股票预测

2023-11-07

 引言


       密集连接网络和卷积神经网络都有主要的特点,那就是它们没有记忆。它们单独处理每个输入,在输入和输入之间没有保存任何状态。举个例子:当你在阅读一个句子的时候,你需要记住之前的内容,我们才能动态的了解这个句子想表达的含义。生物智能已渐进的方式处理信息,同时保存一个关于所处理内容的内部模型,此模型是根据过去额信息构建的,并随着新的信息进入不断更新。比如股票预测、气温预测等等。

一、mlp和RNN结构

                   

 RNN特点:前部序列的信息经处理后,作为输入信息传递后部序列。

手写一下啦,本博主有点懒,懂了就阔以啦! 肯定权重是一样的。

二、不同的RNN结构

(1)多输入多输出,维度相同RNN结构

       应用:特定信息识别

结构如图:

                                                      

(2)多输入单输出

         应用:情感识别

          举例:I feel very happy.

          判断:positive

结构如图:

(3)单输入多输出

         应用:序列数据生成

         举例:文章生成(输入标题直接出文章)

 结构如图:

(4)多输入多输出(i\neqj)

        应用:语言翻译

        举例:what is artificial intelligence?

        什么是人工智能?

 结构如图:

 介绍了常见的RNN结构。但是这些结构在当前部序列信息在传递到后部的同时,信息权重下降,导致重要信息丢失。也称为(梯度消失)。由于这个问题接下来提出了长短期记忆网络(LSTM)。

三、长短期记忆网络(LSTM)

                            

通过a^{i}传递前部序列信息,距离越远信息丢失越多(从彩色图可以很好的体现)。

 增加记忆细胞,可以传递前部远处部位信息,且在传递过程中信息丢失少。

内部结构:

 忘记门:选择性丢弃

 中不重要的信息。

更新门:确定给记忆细胞添加哪些信息。

输出门:筛选需要输出的信息。

 结构如图:

 在网络结构很深(很多层)的情况下,也能保留保留重要的信息;

解决了普通RNN求解过程中的梯度消失问题。

四、温度预测问题——神经网络基于GUR

数据集介绍:

 除了语言处理,其他许多问题中也都用到了序列数据。温度预测数据集,每十分钟记录14分不同的量(比如气温、气压、湿度、风向等)我们将利用2009-2016年的数据集构建模型,输入最近数据,预测24小时之后的气温。​​​​​​¶

(一)读入数据两种方式介绍:

(1)dataframe格式:

注意:

Initializing from file failed
由于文件中存在中文所以加后面engine='python'

data1=pd.read_csv('/data/jena_climate_2009_2016.csv',engine='python')

后续简单操作代码如下:转化成数组

data=data1.copy()
df=data.values
data=df[:,1:]
data
data = np.array(data, dtype=np.float64)#方便后面数据标准化

(2)str格式:

import os
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
data_dir='/data'
fname=os.path.join(data_dir,'jena_climate_2009_2016.csv')
f=open(fname)
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
header

 后续简单操作代码如下:转化成数组

float_data=np.zeros((len(lines),len(header)-1))
for i,line in enumerate(lines):
    values=[float(x) for x in line.split(',')[1:]]
    float_data[i,:]=values

结果如图:

补充 :enumerate()函数

英语翻译:就是枚举

names = ["Alice","Bob","Carl"]
for index,value in enumerate(names):
    print(f'{index}: {value}')

 看结果就懂了:

0: Alice
1: Bob
2: Carl

(二)分析数据,数据可视化 

from matplotlib import pyplot as plt
temp=data[:,1]
plt.plot(range(len(temp)),temp)#可以看出每年温度的周期性变化
#看完整体看局部前十天的温度变化
#首先呢每十分钟记录一个数据点,一天则可以记录144个数据点,则十天记录1440个数据点
plt.plot(range(1440),temp[:1440])#后面是冬季

结果如图:

    

 (三)处理数据,可以输入RNN模型

(1) 首先数据预处理(将数据处理为神经网络可以处理的格式,由于已经是数值型的,所以不需要向量化)。
但是由于数据每个时间序列位于不同的范围所以我们需要对每个时间序列进行标准化,让他们在相似范围内都取较小的值。
我们采取200 000个时间作为训练数据。

mean=data[:200000].mean(axis=0)
print(mean)
std=data[:200000].std(axis=0)
print(std)
data_-=mean
data_/=std

 (2)提取序列数据

首先介绍Input_shape=(samples,time_steps,features)

举个例子:比如700个数据,我用8个数据去预测第九个数据:

[1 , 2 , . . . ,8]      ----9   ——x_{1}

[2 , 3 , . . . ,9]      ----10 ——x_{2}

[3 , 4 , . . . ,10]

.

and so on。                   ——x_{n} n 代表samples     

time_steps=8

features:样本特征维数(自然语言处理十分重要 one-hot格式比如001对应三),这里数据是单维度则为1.

def extract_data(data,time_step):
    X=[]
    y=[]
    #0,1,2,3...,9:10个样本;time_step=8;0,1...7;2,3...8两个样本
    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)
    return X,y

五、单层lstm股票预测 

 (一)导包读入数据

%matplotlib inline
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
data_=pd.read_csv('/data/zgpa.csv',engine='python')
data_.head()

(二)数据预处理 

close=np.array(close,dtype=np.float64)
mean=close.mean(axis=0)
print(mean)
std=close.std(axis=0)
print(std)
close-=mean
close/=std

(三)时间序列数据可视化

#首先我们看一下收盘价格时间序列的趋势
close=data_['close']
close
plt.plot(range(len(close)),close)
plt.title('close price')

结果如图:

(四)提取序列数据与上面一样

调用:

X,y=extract_data(close,time_step)
print(X[0,:,:])
print(y)

(五)建立单个LSTM模型

from keras.models import Sequential
from keras.layers import Dense,SimpleRNN
model=Sequential()
#add rnn layer
model.add(SimpleRNN(units=8,input_shape=(time_step,1),activation='relu'))
#add output layer
model.add(Dense(units=1,activation='linear'))
#configure the model
model.compile(optimizer='adam',loss='mean_squared_error')
model.summary()

结果如图:

 (六)训练模型

y=np.array(y)
model.fit(X,y,batch_size=30,epochs=200)

结果如图:

 (七)预测与真实可视化

y_train_predict=(model.predict(X)*std)+mean
y_train=(y*std)+mean
fig1=plt.figure(figsize=(8,5))
plt.plot(y_train,label='real price')
plt.plot(y_train_predict,label='predict price')
plt.title('close price')
plt.xlabel('time')
plt.ylabel('price')
plt.legend()
plt.show()

结果如图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】——循环神经网络RNN及实例气温预测、单层lstm股票预测 的相关文章

随机推荐

  • 网页三剑客之 HTML

    本章开始我们来介绍一下网页前端部分 我们只是简单的介绍一些常用的各种标签 其目的在于为我们后面的项目做准备 我们并不要求能完全掌握前端的语法 但是在见到以后能够认识这些代码就可以了 想走后端开发的 前端不需要多么熟悉 毕竟在各个企业中前后端
  • 四种常用的自动化测试框架

    一直想仔细研究框架 写个流水账似的测试程序不难 写个低维护成本的测试框架就很难了 所以研究多种测试框架还是很有必要的 知道孰优孰劣 才能在开始编写框架的时候打好基础 今天读到了KiKi Zhao的翻译文章 觉得很是不错 写了一点学习心得 有
  • Numpy简单入门

    概述 Numpy是高性能科学计算好数据分析的基础包 提供了矩阵运算的功能 在深度学习和数据分析领域广泛应用 使用 创建array数组 vector np asarray 1 2 3 4 创建zero数组 a np zeros 10 创建向量
  • FatFS文件系统的使用(STM32)

    目录 1 Fatfs相关文件 2 驱动测试 3 重试机制 4 实现较为复杂的文件操作 4 1 获取磁盘容量 4 2 遍历目录 获取文件大小和数量 以及查找 删除等操作 4 3 认识文件权限和错误码 1 Fatfs相关文件 fatfs的介绍这
  • 聊聊leader的自我修炼

    这是鼎叔的第十七篇原创文章 行业大牛和刚毕业的小白 都可以进来聊聊 欢迎关注本人专栏和微信公众号 敏捷测试转型 大量原创思考文章陆续推出 4月3号晚上 鼎叔作为嘉宾参与小道消息播客的直播分享节目 和主持人老徐和兔子畅谈测试管理的那些事 本文
  • 【廖雪峰python入门笔记】列表生成式

    1 生成列表 要生成list 1 2 3 4 5 6 7 8 9 10 我们可以用range 1 11 gt gt gt range 1 11 1 2 3 4 5 6 7 8 9 10 但如果要生成 1x1 2x2 3x3 10x10 怎么
  • Web系统大规模并发:电商秒杀与抢购

    http blog jobbole com 91754 一 大规模并发带来的挑战 在过去的工作中 我曾经面对过5w每秒的高并发秒杀功能 在这个过程中 整个Web系统遇到了很多的问题和挑战 如果Web系统不做针对性的优化 会轻而易举地陷入到异
  • Android图片加载优化方案

    1 前言 在电商APP中 图片在整个页面中占比最大 清晰高质量的图片能够明显提升转化率 但是APP运行环境错综复杂 往往我们会遇到 图片压缩导致模糊 列表加载长时间显示空白图 查看大图黑屏过久 甚至因为图片过大导致crash等 如下效果展示
  • Java编程思想课后练习题——第三章-操作符

    本文主要依据 Java编程思想 的示例及课后练习 通过个人编写 同时参考答案的代码写法 主要目的是用于自己熟悉编码风格 同时可以给更多人提供参考 只完成了部分练习 练习1 package 操作符 import static net mind
  • VScode安装

    1 下载安装VScode 下载地址 Visual Studio Code Code Editing Redefined 浏览器下载很慢 我们进入下载页面 复制下载链接 https az764295 vo msecnd net stable
  • ubunutu20.04 pycharm使用anaconda下环境(主要是pytorch)

    新建pycharm项目和anaconda环境 打开pycharm new project new environment using conda 修改环境名 项目名 python版本选择3 9 我的电脑pyTorch在3 9上跑通了 其他版
  • SAP应付模块详解

    本文介绍以下内容 应付模块的基础知识 主数据 供应商 发票处理 付款及清账 预付款 应付票据 其他特别总账业务 供应商余额查询 定期处理 月末及年末年初的操作 应付模块报表 应付模块设计的流程清单和方案要点 由于应付模块和应收模块在很多方面
  • LaTex 之 数学运算符号

    属于号 in 开根号 sqrt 求和符号 sum 积分符号 int min max 大于等于 小于等于号 导言区使用两个宏包 usepackage amsmath usepackage amssymb 大于等于号 geqslant or g
  • Code Review的亲身实践

    Code Review 中文叫代码审查 指的是完成了部分功能的代码开发之后 在代码真正合并到仓库主分支之前 邀请同事帮你进行代码的审核和检查 检查代码的质量 规范 设计等等方面的过程 代码审查的好处 知识共享 进行代码审查的好处很多 其中一
  • Elasticsearch入门初探-单机多节点集群

    实时搜索引擎Elasticsearch 简称ES 是一个基于Apache Lucene 的开源搜索引擎 无论在开源还是专有领域 Lucene可以被认为是迄今为止最先进 性能最好 这里分享Elasticsearch入门在单机下如何配置多节点集
  • 数据权限——Mybatis拦截器实现

    一 需求背景介绍 1 需求介绍 需要实现数据权限管理 包含角色 普通用户 组长 管理员 其中普通用户只能看到自己创建的项目 组长能看到自己所管理的普通用户创建的项目 管理员能看到所有项目 相关表为 项目表 包含责任人owner字段 owne
  • iconfont下载到本地使用教程

    1 选择Symbol下载至本地 2 将压缩包进行解压 将压缩包如下后缀的文件放入项目中 iconfont css iconfont ttf iconfont woff iconfont woff2 通过import进行导入到index cs
  • 使用python-docx生成word文档

    基于python docx生成自定义word文档 源代码 from docx import Document from docx shared import Pt Inches from docx oxml ns import qn fro
  • Linux 字节序与字节对齐优化

    1 字节序跟Linux Windows无关 是由CPU构架决定 同一个CPU不管装的是Windows 或 Linux 字节序都是一样的 2 字节对齐 Linux 全用 attribute packed 作用于结构体 类似于pragma pa
  • 【深度学习】——循环神经网络RNN及实例气温预测、单层lstm股票预测

    引言 密集连接网络和卷积神经网络都有主要的特点 那就是它们没有记忆 它们单独处理每个输入 在输入和输入之间没有保存任何状态 举个例子 当你在阅读一个句子的时候 你需要记住之前的内容 我们才能动态的了解这个句子想表达的含义 生物智能已渐进的方