深度学习ARIMA模型训练和LSTM

查看 73|回复 5
作者:glm_52   
如果是多层LSTM,怎么来进行控制张量维度的变化,多层的LSTM只需要把参数num_layers改了就可以了吗?最近在写深度学习ARIMA模型代码  并且用数据进行训练,但是奈何训练完后(.fit函数之后),下边的程序就不运行了,而且尝试输出经过训练完后的东西,什么都没有,是哪里出了问题吗???请大佬们指点。
import pandas as pd
import datetime
import matplotlib.pylab as plt
import seaborn as sns
import numpy as np
from matplotlib.pylab import style
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
style.use('ggplot')                             #样式美化
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取数据             读取的数据路径             索引的列编号    解析0列的值作为单独的日期
data = pd.read_csv( "./dataset/LD2011_2014.csv", index_col=0, parse_dates=[0])
# data.head
# 异常值替换
data = data.replace(0.000000, np.nan)
# 提取一户的数据
data_158_week = data["MT_158"].resample("W").sum()   # W是周   按照每周的数据进行求和
data_158_week_train = data_158_week["2011-01-09":"2014-12-28"]
data_158_week_train.plot()              #plot函数用来画线,画点
# 将序列平稳(差分法确定d)
data_diff = data_158_week_train.diff()    #diff用来求差分
data_diff = data_diff.dropna()
plt.figure()
plt.plot(data_diff)
plt.title("一阶差分")      #做差分为了消除恒定趋势
plt.show()
# 自相关函数ACF求p        lags 表示滞后的阶数
acf = plot_acf(data_diff, lags=20)
plt.title("ACF")
acf.show()
# 偏自相关函数pacf求q
pacf = plot_pacf(data_diff, lags=20)
plt.title("PACF")
pacf.show()
# 训练模型 ARIMA(p,d,q)
model = ARIMA(data_158_week_train, order=(1,1,1),freq='W')
result = model.fit()     #程序执行到这里之后  就没有返回值了  而且下面的程序也不执行了,不知道是什么原因
# 选择时间段进行预测

pred = result.predict(
"2014-10-26"
,
"2015-01-15"
,
[color=]dynamic
=
[color=]True
,
[color=]typ
=
"levels"
)      


[color=]print
(pred)
# 将原本数据与预测数据同时画在图上,展示预测效果

plt.figure(
[color=]figsize
=(
[color=]6
,
[color=]6
))      
#为什么显示不出来???????

plt.xticks(
[color=]rotation
=
[color=]45
)
plt.plot(pred)
plt.plot(data_158_week_train)
plt.show()
其中,所用到数据集格式如下:https://imgse.com/i/ppQxa8K就是简单的用电数据,按照每周进行求和

数据, 宋体

xp9477   

关于多层LSTM模型的问题,只需改变参数num_layers来控制LSTM的层数,但是需要注意每一层的输入和输出张量的维度要与相邻的层保持一致,否则会报维度不匹配的错误。
关于你的深度学习ARIMA模型的问题,程序执行到.fit()函数后就没有返回值了,这是因为模型训练需要一定时间,你需要等待模型训练完成后才能进行后续的操作。你可以尝试在.fit()函数后面加上print(result.summary())来查看模型训练的结果,或者使用result.summary2()来查看更详细的模型训练结果。另外,如果训练过程中出现了错误,可以查看错误信息来定位问题所在。
glm_52
OP
  


xp9477 发表于 2023-3-15 21:59
关于多层LSTM模型的问题,只需改变参数num_layers来控制LSTM的层数,但是需要注意每一层的输入和输出张量的 ...

ARIMA模型在运行到fit()后,等他运行完,后面的代码都不会运行,即使在后边加上print,也不会输出,fit完之后程序就直接停止了,后边写什么代码都没反应了,不知道是为什么
chenlinpsp   

帮顶一下
glm_52
OP
  


chenlinpsp 发表于 2023-3-16 09:01
帮顶一下

谢谢,太感谢了
jamstory   

对于多层LSTM,只需要改变num_layers参数即可改变模型层数,但是需要注意张量维度的变化。
关于代码的问题,可能是模型训练过程中出现了错误导致程序中断。可以尝试添加try...except语句来捕获错误并输出错误信息。另外,也可以尝试在模型训练过程中加入更多的输出语句,以便更好地了解训练进展情况。
如果你只是想增加LSTM的层数,只需要调整num_layers参数即可,但是需要注意的是,每增加一层LSTM,输入的张量的维度也会相应地增加一个维度,因此需要注意维度的变化。
例如,如果输入张量的形状是(batch_size, seq_len, input_size),那么增加一层LSTM之后,输出的张量的形状就变成了(batch_size, seq_len, hidden_size),其中hidden_size是LSTM的隐藏状态维度。
关于ARIMA的问题:
根据你提供的代码和数据,我发现在调用plot()函数时,你使用了错误的方法。应该是plt.plot()而不是acf.show()和pacf.show()。因此,这些图形没有正确显示。
此外,你发现程序在执行result = model.fit()之后似乎没有任何反应,这是因为模型的拟合需要一些时间,具体取决于你的数据量和模型参数。你可以加入一些输出语句来跟踪程序的执行进度,例如在result = model.fit()之前输出一条消息,以便知道程序在哪里运行。
另外,你可以尝试调整模型的参数,例如order和freq,看看是否能改善模型的性能。此外,还可以尝试使用其他时间序列模型,例如LSTM或GRU,以获得更好的预测效果。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部