IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于kears的LSTM时间序列预测 -> 正文阅读

[人工智能]基于kears的LSTM时间序列预测

1 keras

1.1 入门

资源:
https://www.bilibili.com/video/BV1Ct411H7rm?from=search&seid=13437359564386162135

keras是一种深度学习框架,用起来比tensorflow简单

目前深度学习框架用得最多的是tensorflow,pytorch,keras,keras比tensorflow大约慢一倍。

安装:安装好python环境后,要安装tensorflow(有CPU和GPU版本,为了简单可以安装CPU版本),之后在命令行输入 pip install keras

1.2 简单的线性回归

import keras

import numpy as np

import matplotlib.pyplot as plt
# Sequential 按顺序构成的模型
from keras.models import Sequential
# Dense 全连接层
from keras.layers import Dense

# 使用numpy的随机函数生成100个点

x_data = np.random.rand(100)
noise = np.random.normal(0,0.01,x_data.shape)
y_data = x_data*0.1 + 0.2 + noise

#scatter生成散点图
plt.scatter(x_data,y_data)

在这里插入图片描述

# 构建一个顺序模型
model = Sequential()

# 在模型中添加(add)一个全连接层(Dense)
model.add(Dense(units=1,input_dim=1)) #参数的意思:输入输出都是一维(输入一个x,输出一个y)

# 编译模型
#sgd:随机梯度下降法
#mse:均方误差
model.compile(optimizer='sgd',loss='mse')

# 训练模型,因此需要循环进行不断的迭代

for step in range(3001):
    #把所有数据作为一个批次,每次训练一个批次
    cost = model.train_on_batch(x_data,y_data)
    #每500个batch打印依次cost值
    if step%500 == 0:
        print('batch:',step,'cost:',cost)
        
#打印权值和偏置值
W,b = model.layers[0].get_weights()
print('W:',W,'b:',b)

#模型训练好之后,把x_data输入网络中,得到预测值

y_pred = model.predict(x_data)

#显示随机点
plt.scatter(x_data,y_data)

#显示预测结果
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()

在这里插入图片描述

1.3 非线性回归

  • 增加隐藏层
  • 设定激活函数,在未设置激活函数时,默认为线性激活函数
    在这里插入图片描述

2 LSTM

如何将时间序列数据变为LSTM的输入输出数据
(只考虑一维数据)

LSTM时间序列预测可以实现单步预测、多步预测
单步预测:步预测1步
在这里插入图片描述
多步预测::3步预测3步
在这里插入图片描述
将时序数据转换为LSTM的训练数据函数如下:
输入时序数据、input_size步预测output_size步

def data_split(data,input_size,output_size):
    X,Y = [],[]
    for arr in data:
        for i in range(len(arr)):
            if i+input_size+output_size-1 < data.shape[1]:
                X.append(arr[i:i+input_size])
                Y.append(arr[i+input_size:i+input_size+output_size])               
    return np.array(X),np.array(Y)

例如,

x,y = data_split(dat,3,3)

data为2* 25的ndarray数组
在这里插入图片描述
输出的x,y为40* 3的ndarray数组
在这里插入图片描述
值得注意的是!!! LSTM的输入格式为:(N,T,M)
N:训练数据长度
T:上述模型为3输入3输出模型,T就为3
M:1(因为是一维数,数据特征的维数)

因此需要对输入数据进行

 x = np.reshape(x, (x.shape[0], 3,1))

x,y 得到之后,模型构建如下函数:

n_in = x.shape[1]
n_features = .shape[2]
n_out = y.shape[1]

model = create_model(n_in,n_features,n_out)

构建LSTM子函数

def create_model(n_in,n_features,n_out):
    model = Sequential()
    model.add(LSTM(128, activation='relu', input_shape=(n_in, n_features),return_sequences=True))
    model.add(LSTM(128, activation='relu'))
    model.add(Dropout(0.3))#正则化
    model.add(Dense(n_out))
    model.compile(optimizer='adam', loss='mae')
    return model

训练模型


error_matrix = []
for step in range(1001):#训练1000次
    cost = model.train_on_batch(x,y)
    error_matrix.append(cost)
    if step%100 == 0:        
        print('batch:',step,'cost:',cost)
        
        
y_train_pred = model.predict(x)
train_error = np.mean(abs(y_train_pred-y)/y)
print('训练集上的误差为:',train_error*100,'%')
plt.plot(error_matrix)
plt.xlabel('训练次数')
plt.ylabel('误差函数值')
plt.savefig('fig2.png',dpi=600)

误差函数变化如图:

在这里插入图片描述
LSTM模型的预测结果如图
(这个图只用了前22个数据训练模型,模型为3-3)

在这里插入图片描述

3 附录

构建RNN子函数

def create_model_RNN(n_out):
    model1 = Sequential()
    model1.add(SimpleRNN(128))
    model1.add(Activation('relu'))  #激活层
    model1.add(Dropout(0.5))  # dropout层防止过拟合
    model1.add(Dense(3))      # 全连接层
    model1.add(Activation('relu'))  #激活层
    model1.compile(optimizer='adam', loss='mae')
    return model1

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:55:38  更:2021-09-01 11:57:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:23:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码