Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning Keras LSTM时间序列_Machine Learning_Python - Fatal编程技术网

Machine learning Keras LSTM时间序列

Machine learning Keras LSTM时间序列,machine-learning,python,Machine Learning,Python,我有一个问题,在这一点上,我完全不知道如何解决它。我使用带有LSTM层的Keras来投影时间序列。我试图用前10个数据点来预测第11个 代码如下: from keras.models import Sequential from keras.layers.core import Dense, Activation, Dropout from keras.layers.recurrent import LSTM def _load_data(data): """ data should be p

我有一个问题,在这一点上,我完全不知道如何解决它。我使用带有LSTM层的Keras来投影时间序列。我试图用前10个数据点来预测第11个

代码如下:

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM

def _load_data(data):
"""
data should be pd.DataFrame()
"""
n_prev = 10
docX, docY = [], []
for i in range(len(data)-n_prev):
    docX.append(data.iloc[i:i+n_prev].as_matrix())
    docY.append(data.iloc[i+n_prev].as_matrix())
if not docX:
    pass
else:
    alsX = np.array(docX)
    alsY = np.array(docY)
    return alsX, alsY

X, y = _load_data(df_test)

X_train = X[:25]
X_test = X[25:]

y_train = y[:25]
y_test = y[25:]

in_out_neurons = 2
hidden_neurons = 300
model = Sequential()
model.add(LSTM(in_out_neurons, hidden_neurons, return_sequences=False))
model.add(Dense(hidden_neurons, in_out_neurons))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, y_train, nb_epoch=10, validation_split=0.05)

predicted = model.predict(X_test)
因此,我获取输入数据(一个两列数据帧),创建X,它是一个n×10×2的数组,y是一个n×2的数组,它比X的每个数组的最后一行提前一步(用它前面的点标记数据)

他回来了

[[ 7.56940445,  5.61719704],
[ 7.57328357,  5.62709032],
[ 7.56728049,  5.61216415],
[ 7.55060187,  5.60573629],
[ 7.56717342,  5.61548522],
[ 7.55866942,  5.59696181],
[ 7.57325984,  5.63150951]]
但我应该去

[[ 73,  48],
[ 74,  42],
[ 91,  51],
[102,  64],
[109,  63],
[ 93,  65],
[ 92,  58]]
原始数据集只有42行,所以我想知道是否没有足够的数据来处理?或者我可能错过了建模过程中的一个关键步骤?我见过一些使用嵌入层等的示例,这是我应该关注的吗

提前感谢您的帮助!

嘿,瑞安! 我知道为时已晚,但我刚刚遇到了你的问题,希望不要太晚,或者你仍然可以在这里找到一些知识

首先首先,Stackoverflow可能不是解决此类问题的最佳场所。第一个原因是您有一个概念性问题,而这不是本网站的目的。此外,您的代码运行正常,因此它甚至不是一般编程的问题。请看一看

第二据我所知,没有概念上的错误。您正在使用一切必要的工具,即:

  • 带有支撑器尺寸的lstm
  • return\u sequences=false
    就在您的
    密集层之前
  • 输出的线性激活
  • mse
    成本/损失/目标函数
第三然而,我发现你的网络不太可能用这么少的数据来学习任何东西。你必须明白,你这里的数据少于参数!对于大多数监督学习算法,你首先需要的不是一个好的模型,而是好的数据。你不能从这么少的示例中学习es,特别是不适用于复杂模型,如LSTM网络

第四您的目标数据似乎是由相对较高的值组成的。这里预处理的第一步可能是标准化数据:将数据集中在零附近-即按平均值转换数据-并按标准偏差重新缩放。这真的有助于学习

第五一般来说,以下是一些你应该研究的事情,以改进学习和减少过度适应:

  • 其他优化器(例如)
  • (这并非详尽无遗,如果您正在阅读本文并认为应该添加一些内容,请对其进行评论,以便对未来的读者有用!)
最后但并非最不重要的一点我建议你看看这个,尤其是


PS:Daniel Hnyk更新了他的;)

42行对于神经网络来说可能是不够的。在11个时间步中,只给出了4个完全不同的示例。通常,神经网络数据集从数千个示例开始,这取决于学习任务的难度。请问您在编写此代码时使用的keras版本是什么?看来更新把一切都搞砸了,这是迄今为止对我来说最好的资源。我投你的票,给你一颗星星。Ryan,你能做到吗?如果是的话,你介意分享你的代码吗?这样我们可以从中学习?我一直在阅读一些断章取义的教程(如下面维克托回答中的链接)和Github上的一系列keras问题,但都没有用。我讨厌LSTM周围的社区,你们中没有人会解释任何东西。数据的初始形状是什么?最终结果应该是什么?维克多-我很好奇你是否看到过可以输入多个系列(可能是多个系列)进行预测的例子?类似于你的教程,但有额外的数据,如一周中的某一天、假日的标志等?我想你可以尝试从教程中的示例加载其他列的数据,而不是简单地运行在家庭的全局功率上。从理论上讲,你的问题和教程中的问题之间没有什么区别。网络可以接受多个输入,特别是多个维度。它可以帮助你看一看关于维度的教程的这一部分:很抱歉回答得太晚,我目前正在亚洲旅行:)@VictorSmt谢谢你的链接。这篇文章更新后说,它不起作用,他不能真正帮助人们解决LSTM问题:/你知道其他用于时间序列预测的keras LSTM教程或示例吗?