【问题标题】:keras LSTM model for timeseries not working时间序列的 keras LSTM 模型不起作用
【发布时间】:2020-07-11 16:34:40
【问题描述】:

我正在使用以下代码来预测时间序列数据。我使用了 Quandl 数据。但是相同的代码适用于数据集机器人不会适用于另一个。没有编译错误。但是在模型构建步骤之后,我没有得到任何结果。

代码:

import pandas as pd
import quandl
quandl.ApiConfig.api_key = 'my-quandl-code'
import matplotlib.pyplot as plt
pd.plotting.register_matplotlib_converters()

col = "Net"
df = quandl.get("ISM/MAN_PROD")  #Not working for this dataset

#col = "High" 
#df = quandl.get("EOD/HD") Works for this datset

df = df[col]
df = df.reset_index()
df =df.rename(columns = {"Date":"ds",col:"y"})

from sklearn.preprocessing import MinMaxScaler
values = df['y'].values.reshape(-1,1)
values = values.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)

train_size = int(len(scaled) * 0.9)
test_size = len(scaled) - train_size
train, test = scaled[0:train_size,:], scaled[train_size:len(scaled),:]
print(len(train), len(test))

def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset) - look_back):
        a = dataset[i:(i + look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    print(len(dataY))
    return np.array(dataX), np.array(dataY)

import numpy as np
look_back = 5
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(100, input_shape=(trainX.shape[1], trainX.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
history = model.fit(trainX, trainY, epochs=300, batch_size=100, validation_data=(testX, testY), verbose=0, shuffle=False)
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='test')
plt.legend()
plt.show()

请帮忙。

【问题讨论】:

  • 你为什么禁用 fit 呼叫的随机播放?

标签: keras time-series lstm forecasting quandl


【解决方案1】:

尝试更改此行:

history = model.fit(trainX, trainY, epochs=300, batch_size=100, validation_data=(testX, testY), verbose=0, shuffle=False)

到:

history = model.fit(trainX, trainY, epochs=10, batch_size=100, validation_data=(testX, testY), verbose=1, shuffle=False)

换句话说,先用更少的 epoch 进行训练,然后设置 verbose=1 以便您的程序将您的训练进度打印到 stdout。如果这运行成功,那么您可以将上面的行改回原来的,具有更高的 epoch 数和 0 详细度。

【讨论】:

  • 我不建议减少训练的 epoch 数。只是为了检查代码是否正常运行。 @MathiasMüller
【解决方案2】:

问题是由于数据集中的一些空值造成的。我删除了它,它的工作原理。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 2018-10-28
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2019-04-15
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多