【深度学习】——循环神经网络RNN及实例气温预测_rnn 预测温度
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
引言
密集连接网络和卷积神经网络都有主要的特点那就是它们没有记忆。它们单独处理每个输入在输入和输入之间没有保存任何状态。举个例子:当你在阅读一个句子的时候你需要记住之前的内容我们才能动态的了解这个句子想表达的含义。生物智能已渐进的方式处理信息同时保存一个关于所处理内容的内部模型此模型是根据过去额信息构建的并随着新的信息进入不断更新。比如股票预测、气温预测等等。
一、mlp和RNN结构
RNN特点:前部序列的信息经处理后作为输入信息传递后部序列。
手写一下啦本博主有点懒懂了就阔以啦 肯定权重是一样的。
二、不同的RNN结构
1)多输入多输出维度相同RNN结构
应用:特定信息识别
结构如图:
2多输入单输出
应用:情感识别
举例:I feel very happy.
判断:positive
结构如图:
3单输入多输出
应用:序列数据生成
举例:文章生成输入标题直接出文章
结构如图:
4多输入多输出ij
应用:语言翻译
举例:what is artificial intelligence?
什么是人工智能?
结构如图:
介绍了常见的RNN结构。但是这些结构在当前部序列信息在传递到后部的同时信息权重下降导致重要信息丢失。也称为梯度消失。由于这个问题接下来提出了长短期记忆网络LSTM。
三、长短期记忆网络LSTM
通过传递前部序列信息距离越远信息丢失越多从彩色图可以很好的体现。
增加记忆细胞可以传递前部远处部位信息且在传递过程中信息丢失少。
内部结构:
忘记门:选择性丢弃
与 中不重要的信息。
更新门:确定给记忆细胞添加哪些信息。
输出门:筛选需要输出的信息。
结构如图:
在网络结构很深很多层的情况下也能保留保留重要的信息;
解决了普通RNN求解过程中的梯度消失问题。
四、温度预测问题——神经网络基于GUR
数据集介绍:
除了语言处理其他许多问题中也都用到了序列数据。温度预测数据集每十分钟记录14分不同的量比如气温、气压、湿度、风向等我们将利用2009-2016年的数据集构建模型输入最近数据预测24小时之后的气温。¶
一读入数据两种方式介绍:
1dataframe格式:
注意:
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)#方便后面数据标准化
2str格式:
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 ——
[2 , 3 , . . . ,9] ----10 ——
[3 , 4 , . . . ,10]
.
.
.
and so on。 —— 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