ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

时间序列项目LSTM

2022-02-08 20:06:08  阅读:123  来源: 互联网

标签:项目 batch shape train 序列 model LSTM size


前言

这个项目真的好烦,我感觉我每次都能学到很多不一样的想法,每一次的学习都告诉我,我之前做错了,想错了。一个人的路真的好难走,就跟踩着牛粪一样,忍着臭往前走,饿了就用牛粪烤些馍吃继续走

LSTM数据准备

  1. 将时间序列转化为监督学习问题。
  2. 将时间序列转换为平稳时序。
  3. 将观察结果转换成具体的比例。

思考

所以我之前出现的shape问题是不是因为我的数据不能跟之前玩目标检测一样无脑的导入,而是还要转化一下???

LSTM建模步骤

LSTM 层输入格式:为矩阵,矩阵内容 [ samples, time steps, features ]

samples:来自 domain 的独立观测值,通常是 data 的行数据–就是行数
time steps:对于给定的观测值,给定变量有单独的时间步–就是时间窗口
features:在得到观测值的时刻,观测到的单独的 measures–就是列数(属性个数)

1、数据reshape为LSTM输入格式
鉴于训练数据集被定义为x输入和y输出,它必须被重塑成样本/时间步/功能格式。
在tensorflow里面我们看到RNN的文档,他的inpu为三维【batchsize样本,max-time时间步长,features特征维度】
例如:

X, y = train[:, 0:-1], train[:, -1]
X = X.reshape(X.shape[0], 1, X.shape[1])

2、LSTM层定义

layer = LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True)

batch_input_shape=表示每个batch需要读取的数据格式(batch_size=每batch读的数据行数,步长,属性数)
neurons=神经元个数,即记忆单元个数,1~5 就很高效了
batch通常和epoch一起
epochs:确定网络学习数据快慢,即权重的更新频率

3、输出定义
输出层是单一的神经元,用的线性激活函数来预测下一时间步的数据

4、编译
一旦指定了网络,就必须使用后端数学库(如TensorFlow或Theano)将其编译为高效的符号表示形式。
在编译网络时,咱们必须指定一个损失函数和优化算法。咱们将使用“ mean_squared_error ”做为损失函数,由于它与咱们感兴趣的RMSE紧密匹配,以及高效的ADAM优化算法。

#定义一个名为fit_lstm()的函数,它将训练并返回一个LSTM模型
def fit_lstm(train, batch_size, nb_epoch, neurons):
    X, y = train[:, 0:-1], train[:, -1]#获取数据集
    X = X.reshape(X.shape[0], 1, X.shape[1])  #重塑数据,转化成矩阵
    
    model = Sequential()  #使用Sequential Keras API来定义网络,即调用模型
    model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))#添加模型,设置模型参数
    model.add(Dense(1)) #model.add 添加神经层,添加的是 Dense 全连接神经层
    model.compile(loss='mean_squared_error', optimizer='adam')
    #使用“ mean_squared_error ”做为损失函数,因为他和我们感兴趣的RMSE紧密匹配。再使用ADAM优化算法
    for i in range(nb_epoch):  #下面是一个手动使网络适应训练数据的循环(#按照给定的训练周期循环训练)
        model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)  
        #默认状况下,一个时间点的样本在暴露在神经网络以前是会被搅乱的,因此我们希望网络经过观察的顺序来构建状态。所以将“shuffle”设置为“False”。
        #同样默认状况下,神经网络在每一个时间点末尾都会报告大量关于模型的学习进度和性能的调试信息。所以将“ verbose ”参数设置为“ 0 ”来禁止此行为
        model.reset_states()
    return model

#batch_size必须设置为1.这是由于它必须是训练和测试数据集大小的一个因素。

标签:项目,batch,shape,train,序列,model,LSTM,size
来源: https://blog.csdn.net/weixin_51015047/article/details/122829027

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有