开发LSTM模型的最终目标是获得一个可以用于序列预测问题的最终模型。
在本帖中,您将了解如何最终确定您的模型并使用它来对新数据进行预测。
完成这篇文章后,您将了解:
- 如何训练一个最终的LSTM模型。
- 如何保存您的最终LSTM模型,并在之后重新加载它。
- 如何对新数据进行预测。
通过我的新书 《Python LSTM网络》,以“分步教程”和所有示例的“Python源代码”文件,为您的项目打下坚实的基础。
让我们开始吧。

如何使用Keras中的长短期记忆模型进行预测
图片来源:damon jah,部分权利保留。
第一步:训练最终模型
什么是最终LSTM模型?
最终LSTM模型是指您用于对新数据进行预测的模型。
也就是说,给定新的输入数据示例,您希望使用该模型来预测预期的输出。这可能是一个分类(分配一个标签)或一个回归(一个实数值)。
您的序列预测项目的目标是获得一个表现最佳的最终模型,“最佳”的定义取决于:
- 数据:您拥有的历史数据。
- 时间:您在该项目上可花费的时间。
- 流程:数据准备步骤、算法或算法,以及选择的算法配置。
在您的项目中,您收集数据,花费您拥有的时间,并发现数据准备流程、要使用的算法以及如何配置它。
最终模型是这个过程的顶峰,是为了开始实际进行预测而追求的终点。
没有所谓完美的模型。只有您能够发现的最佳模型。
如何最终确定LSTM模型?
您可以通过将选择的LSTM架构和配置应用于您的所有数据来最终确定模型。
这里没有训练集和测试集的划分,也没有交叉验证的折叠。将所有数据重新组合成一个大的训练数据集,并拟合您的模型。
就是这样。
使用最终确定的模型,您可以:
- 将模型保存以供将来或生产使用。
- 加载模型并对新数据进行预测。
有关训练最终模型的更多信息,请参阅
需要 LSTM 帮助进行序列预测吗?
参加我的免费7天电子邮件课程,了解6种不同的LSTM架构(附代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
第二步:保存您的最终模型
Keras提供了一个API,允许您将模型保存到文件。
模型以HDF5文件格式保存,该格式能够有效地将大型数值数组存储在磁盘上。您需要确认已安装h5py Python库。可以按以下方式安装:
1 |
sudo pip install h5py |
您可以使用模型上的save()函数将已拟合的Keras模型保存到文件。
例如
1 2 3 4 5 6 7 8 9 |
# 定义模型 model = Sequential() model.add(LSTM(...)) # 编译模型 model.compile(...) # 拟合模型 model.fit(...) # 保存模型到单个文件 model.save('lstm_model.h5') |
此单个文件将包含模型架构和权重。它还包括所选损失函数和优化算法的规范,以便您可以继续训练。
可以使用load_model()函数再次加载模型(从不同的Python会话中的不同脚本)。
1 2 3 4 5 6 |
from keras.models import load_model # 从单个文件加载模型 model = load_model('lstm_model.h5') # 进行预测 yhat = model.predict(X, verbose=0) print(yhat) |
下面是一个完整的示例,展示如何拟合LSTM模型,将其保存到单个文件,并在之后重新加载。虽然模型的加载在同一个脚本中,但此部分可以从另一个Python会话中的另一个脚本运行。运行示例会将模型保存到文件lstm_model.h5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from keras.models import Sequential from keras.layers import Dense 从 keras.layers 导入 LSTM from numpy import array from keras.models import load_model # 返回训练数据 def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # 定义模型 model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # 编译模型 model.compile(loss='mse', optimizer='adam') # 拟合模型 X,y = get_train() model.fit(X, y, epochs=300, shuffle=False, verbose=0) # 保存模型到单个文件 model.save('lstm_model.h5') # 略... # 稍后,可能从另一个脚本运行 # 从单个文件加载模型 model = load_model('lstm_model.h5') # 进行预测 yhat = model.predict(X, verbose=0) print(yhat) |
有关保存和加载Keras模型的更多信息,请参阅
第三步:对新数据进行预测
在最终确定模型并将其保存到文件后,您可以加载它并使用它进行预测。
例如
- 在序列回归问题上,这可能是预测下一个时间步的实数值。
- 在序列分类问题上,这可能是给定输入序列的类别结果。
或者,根据序列预测问题的具体情况,这可能是任何其他变体。您希望在给定输入序列(X)的情况下,从模型中获得一个结果(yhat),而该序列的真实结果(y)目前是未知的。
您可能对在生产环境中进行预测感兴趣,作为界面的后端,或者手动进行。这实际上取决于您项目的目标。
在将最终模型拟合之前对训练数据执行的任何数据准备工作,也必须应用于任何新数据,然后再进行预测。
预测是简单的事情。
这涉及到获取准备好的输入数据(X),并在加载的模型上调用Keras的预测方法之一。
请记住,用于进行预测的输入(X)仅包含进行预测所需的输入序列数据,而不是所有先前的训练数据。在预测一个序列中的下一个值的情况下,输入序列将是1个样本,具有在定义和拟合模型时使用的固定时间步长和特征数。
例如,通过在模型上调用predict()函数,可以做出形状和尺度与输出层激活函数相同的原始预测。
1 2 3 |
X = ... model = ... yhat = model.predict(X) |
通过在模型上调用predict_classes()函数,可以预测类别索引。
1 2 3 |
X = ... model = ... yhat = model.predict_classes(X) |
通过在模型上调用predict_proba()函数,可以预测概率。
1 2 3 |
X = ... model = ... yhat = model.predict_proba(X) |
有关Keras模型生命周期的更多信息,请参阅
进一步阅读
如果您想深入了解此主题,本节提供了更多资源。
文章
API
总结
在本帖中,您了解了如何最终确定模型并使用它来对新数据进行预测。
具体来说,你学到了:
- 如何训练一个最终的LSTM模型。
- 如何保存您的最终LSTM模型,并在之后重新加载它。
- 如何对新数据进行预测。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
谢谢 Jason
一个问题。为什么我们要用所有数据来最终确定模型?我们不是会再次改变权重吗?在训练数据上训练的模型是我们测试过的未见过的数据(测试集)。新模型(用所有数据训练)可能会更糟,过拟合……是吗?
在这里了解更多关于如何以及为何最终确定模型
https://machinelearning.org.cn/train-final-machine-learning-model/
我解决了这个确切的担忧。
Predict_classes显示的是单个输出,而我的模型设计是用于6个输出。
请帮助我理解它为什么会这样做。
也许可以调用predict()来获取6个类别中每个类别的概率?
你好,
只是好奇。您在LSTM模型中是否选择了“延迟”,如果选了,是如何选择的?
您是指时间步长数吗?随意选择的。
我同时尝试了keras和tensorflow。Tensorflow有更多功能。
确实如此,但使用起来要困难得多。
谢谢,Jason。
我运行了您的示例代码,但发现结果如下,似乎不符合预期。
…… ……
Epoch 290/300
6/6 [==============================] – 0s – loss: 0.0155
Epoch 295/300
6/6 [==============================] – 0s – loss: 0.0153
Epoch 296/300
6/6 [==============================] – 0s – loss: 0.0153
Epoch 297/300
6/6 [==============================] – 0s – loss: 0.0152
Epoch 298/300
6/6 [==============================] – 0s – loss: 0.0152
Epoch 299/300
6/6 [==============================] – 0s – loss: 0.0152
Epoch 300/300
6/6 [==============================] – 0s – loss: 0.0151
[[ 0.28978038]
[ 0.31878966]
[ 0.3477335 ]
[ 0.37631655]
[ 0.4042924 ]
[ 0.43146992]]
假设X的输入是0, 0.1, 0.2, 0.3, 0.4, 0.5,那么y的预测值应该接近0.1, 0.2…0.6。但结果却是0.28978038… … 0.43146992这样的值。
你能多检查一下吗?
问题究竟是什么?
嗨,Jason博士,
非常感谢您的教程。
我想澄清Tieliu的问题
他指的是本页面上您演示的LSTM预测示例,如下所示:
# 返回训练数据
def get_train()
seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]]
seq = array(seq)
X, y = seq[:, 0], seq[:, 1]
X = X.reshape((len(X), 1, 1))
return X, y
# 定义模型
model = Sequential()
model.add(LSTM(10, input_shape=(1,1)))
model.add(Dense(1, activation=’linear’))
# 编译模型
model.compile(loss=’mse’, optimizer=’adam’)
# 拟合模型
X,y = get_train()
model.fit(X, y, epochs=300, shuffle=False, verbose=0)
# 保存模型到单个文件
model.save(‘lstm_model.h5’)
# 略...
# 稍后,可能从另一个脚本运行
# 从单个文件加载模型
model = load_model(‘lstm_model.h5’)
# 进行预测
yhat = model.predict(X, verbose=0)
print(yhat)
运行代码时,训练好的模型未能很好地预测实际响应变量y。它有以下预测的yhat值:
[[0.24346247]
[0.27623463]
[0.30942053]
[0.34286284]
[0.37640885]]
而不是实际的y值。
[[0.1]
[0.2]
[0.3]
[0.4]
[0.5]]
换句话说,如果我们近似地将预测值保留到小数点后两位,模型正确地预测了0.2、0.3和0.4,但在预测0.1和0.5时失败了。在这种情况下,我们是否可以说应该丢弃最终模型,然后决定用另一组不同的流程和配置来训练模型?
抱歉,这个问题比预期的长一些,但我想澄清最初的问题,因为没有进一步的讨论。
抱歉,我不明白,为什么我们要丢弃模型?
因为并非所有预测值都等于实际值(如yhat和y之间的比较所示),或者我错过了您教程中的某个重要概念?
没有模型是完美的。如果完美是可能的,我们就不会需要机器学习。
明白了!非常感谢。
顺便问一下:我们如何展示或说明一个模型是好的?我们是否只关心分数,例如,回归问题?
正确。
你好,我想预测一个形状为(160, 72)的完整记录,为单个时间步。如何为测试设置我的numpy数组特征?为了更清楚地理解,我在形状为(235, 1, 72)的trainX和形状为(235,)的trainY上训练了我的模型。现在我想预测一个时间步,但针对160行。如何做到?
请参阅此帖,了解如何为LSTM重塑数据
https://machinelearning.org.cn/reshape-input-data-long-short-term-memory-networks-keras/
你好 Jason,
感谢您提供的精彩教程。它帮助我训练了一个预测能源模式的模型。
但是,我对将其投入实时预测生产站点感兴趣,并想知道以下问题:
1.我计划使用Flask将上述训练好的模型发布为API,以便在实时网站上生成预测。这是部署的合适工具选择吗?
2.我已经重塑和缩放了我的原始数据来生成模型……这意味着我将需要重塑和缩放所有未来的数据,然后才能将其拟合到训练好的模型中,以便它输出相关的预测吗?
谢谢,并感谢您对我上述问题的回复!
工具和框架在生产中的选择实际上是您和您的利益相关者应该做出的决定。我无法有意义地评论,因为我不会对该决定负责。
在未来应用于模型的所有数据准备工作,都必须应用于新的数据。
嗨,Jason,
在执行model.predict时,我确实得到了一些不一致的输出。这是否意味着我的模型是错误的?据我所知,不一致输出的可能情况是,如果我尝试重新拟合模型,而不是在预测期间。我是否遗漏了什么?希望得到您的评论。非常感谢。
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
在运行它们之前,我也设置了种子。
看起来您做得都很对。
LSTM是随机算法,这篇帖子将阐明这个问题。
https://machinelearning.org.cn/randomness-in-machine-learning/
这篇帖子提供了关于如何获得可重复Keras结果的建议。
https://machinelearning.org.cn/reproducible-results-neural-networks-keras/
非常感谢您的建议,我将进一步思考。
嗨,Jason,
我非常感谢您分享的帖子。
我只想在一个脚本中同时加载3个最终模型,分别是RNN、CNN、LSTM,它们已经保存为Keras的最终模型,用于在集成模型中获得平均结果进行预测。是否必须使用dask数据帧来加载多个最终(保存的模型)模型??或者加载多个最终模型与加载单个最终模型的命令相同?
提前感谢您抽出时间回复。
不需要Pandas DataFrame。每个模型都可以保存和加载到不同的文件中,并用于集成。
嗨,Jason,
我非常感谢这个有帮助的教程。
我先在一个脚本中训练并保存了一个最终的 cnn 模型,之后我在另一个不同的脚本中加载了这个最终的 cnn 模型,我只使用了这个命令:(load_model(‘cnn_model.h5’))。
事实上,我有一个没有标签的测试数据集,并且我想通过这个命令(model_cnn_final.predict_proba)来获得每个样本属于每个类别的概率,但是它给了我这个错误:(AttributeError: ‘Model’ object has no attribute ‘predict_proba’),当我应用这个命令时:[yhat=model.predict_classes(X)],它也给了我这个错误:(‘Model’ object has no attribute ‘predict_classes’)。
我使用了命令:(yhat = model.predict(X)),并且它运行正常。
这些命令导致错误的问题是什么??
我该如何修复这些错误?
我认为这些方法仅支持 Sequential 模型,你可能使用的是 Functional Model API。在这种情况下,你可能仅限于 predict() 函数,对于输出层中的 softmax 激活函数,它将返回概率。
嗨
这太棒了 Jason!
谢谢你的文章🙂
我很高兴它有帮助。
嗨,Jason,
感谢您提供的非常有用的教程。
我有一个问题。我认为我在进行预测时缺少了一些东西。我不明白 model.predict(X) 的输入应该是什么来预测新数据。假设我有一年的数据(每小时采样一次),我想预测接下来的一周。我的 X 应该是什么?
这取决于你如何定义你的模型。
如果模型需要一年的数据来预测一周,那么你必须提供一年的数据作为 X。
这有帮助吗?
但还是不明白。我正在遵循您关于多元时间序列预测的教程(https://machinelearning.org.cn/multivariate-time-series-forecasting-lstms-keras/),我找不到你在哪里定义了这些模型参数。
你好,这是一个非常好的解释,但我想问 verbose 的作用是什么?为什么我们将其设置为 0?
Verbose 提供输出。我们可以通过将其设置为 0 来关闭此输出。
嗨 Jason,感谢您的教程。我非常感谢我从您那里学到的东西。
我有一个问题。假设我有一个 LSTM 模型,并且它在训练和测试数据上都能正常工作,那么模型就可以投入生产了。我的数据具有以下特征:时间戳、价格和市值。如果我想预测明天的价格,我必须
提供时间戳和市值的值吗?还是只需要时间戳?
要进行一次预测,它必须提供一个输入序列,正如你在训练过程中所定义的那样。
嗨 Jason,你所有的博文都非常有见地。迫不及待想阅读更多文章。
之前,我没有正确预处理 X 和 y。现在我使用了 Keras 主页中引用的“堆叠 LSTM 进行序列分类”(https://keras.org.cn/getting-started/sequential-model-guide/#examples)。
这是我的结果。https://github.com/sagar-m/character-classification/blob/master/SAP.ipynb 不幸的是,我没有 ytest.txt 来验证我的结果。请看看,如果你有任何评论,请告诉我。
我的预测类别数量是 12,但是预测输出的类别范围是 1 到 10。不确定为什么,以及是否不正确。
再次非常感谢。
谢谢。
我很乐意提供帮助和回答问题,但我没有能力审查你的代码,我在这里解释得更详细
https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code
嗨 Jason,我有一个问题:“验证方案应该用来估计模型的质量。当你找到正确的超参数并想要获得测试预测时,别忘了使用所有训练数据重新训练你的模型。”
模型使用验证集训练后,我是否应该使用所有训练数据重新训练模型?
谢谢你。
最终模型是在所有可用数据上训练的。
更多信息在这里
https://machinelearning.org.cn/train-final-machine-learning-model/
嗨,Jason,
我有一个与实时验证相关的问题,如果你有输入测试数据(每毫秒 60 帧)并且你想实时进行预测。你怎么能确保预测会完成?
另一方面,假设我们正在接收输入测试数据(100 x 162),时间戳 x 特征。我们将所有信息放入一个样本数组(1,100,162,1)中,然后你想在收到数据时为每个时间实例进行预测。问题是流式数据集太快,模型无法跟上
y_predict = model.predict_classes(test_input)
我想知道你对此类问题有什么建议吗?关于如何使实时流式数据对每次输入变化都能进行预测?
如果你以这种速度运行(预测将继续处理旧数据集。无法跟上新样本)
提前感谢
进行预测速度非常快。
只有训练模型是慢的,这只会在使用模型之前进行一次。
嗨,Jason,
感谢您一如既往的精彩和实用的教程。
我遇到一个问题,即如果要使用 predict(x_dataset) 函数,是否必须填充“x_dataset”?
如果您回答这个问题,我将不胜感激。
此致
Maryam
为了进行预测,输入数据必须与训练数据以相同的方式准备,包括长度和转换。
您好。
我有一个问题。
我有一个带有标签的训练集,假设我下棋,并且有带有获胜者标签的历史比赛(0 = 玩家 1,1 = 玩家 2)。
我想预测在 10/15 步之后,我获胜或失败的概率会更高。
我该如何编写模型来预测一个介于 0 和 1 之间的数字(接近 0 表示我会赢,接近 1 表示我会输)?
谢谢!
一个好的方法可能是使用评分系统来估计每个玩家的技能,并将其输入到预测模型中。
你好 Jason,非常感谢这个出色的教程。
我的顾虑是关于使用训练和测试过的模型来预测未来。这意味着测试集之后的值。
谢谢你。
我很高兴它能帮到你。
嗨,Jason,
我尝试只为一行输入数据进行预测。但我想知道我的新数据是否需要缩放?如果需要,我尝试使用我的缩放模型,但对于每个特征都得到了“0”!!哪种方式是正确的?请帮帮我。
谢谢你。
你的输入数据必须以与训练数据相同的方式准备。
如果训练数据已缩放,则新数据必须使用相同的系数进行缩放。
终于有一个易于理解的关于如何实现 LSTM 的要点了。谢谢!
很高兴它有帮助!
你好 Jason,
我尝试了“Python 中的长短期记忆网络”的 6.7 代码示例。但它给出了错误。
from random import randint
from numpy import array
from numpy import argmax
来自 keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
# 生成一个 [0, n_features) 范围内的随机数序列
def generate_sequence(length, n_features)
return [randint(0, n_features-1) for _ in range(length)]
# One-Hot 编码序列
def one_hot_encode(sequence, n_features)
encoding = list()
for value in sequence
vector = [0 for _ in range(n_features)]
vector[value] = 1
encoding.append(vector)
return array(encoding)
# 解码 One-Hot 编码字符串
def one_hot_decode(encoded_seq)
return [argmax(vector) for vector in encoded_seq]
# 为 lstm 生成一个示例
def generate_example(length, n_features, out_index)
# 生成序列
sequence = generate_sequence(length, n_features)
# One-Hot 编码
encoded = one_hot_encode(sequence, n_features)
print(“Encoded 的形状是:”, encoded.shape)
# 重塑序列为 3D
X = encoded.reshape((1, length, n_features))
# 选择输出
y = encoded[out_index].reshape(1, n_features)
return X, y
# 定义模型
length = 5
n_features = 10
out_index = 2
model = Sequential()
model.add(LSTM(25, input_shape=(length, n_features)))
model.add(Dense(n_features, activation=’softmax’))
model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘acc’])
model.summary()
# 拟合模型
for i in range(10000)
X, y = generate_example(length, n_features, out_index)
model.fit(X, y, epochs=1, verbose=2)
Encoded 的形状是: (1, 10)
—————————————————————————
ValueError 回溯 (最近一次调用)
in ()
1 # 拟合模型
2 for i in range(10000)
—-> 3 X, y = generate_example(length, n_features, out_index)
4 model.fit(X, y, epochs=1, verbose=2)
在 generate_example(length, n_features, out_index) 中
7 print(“Encoded 的形状是:”, encoded.shape)
8 # 重塑序列为 3D
—-> 9 X = encoded.reshape((1, length, n_features))
10 # 选择输出
11 y = encoded[out_index].reshape(1, n_features)
ValueError: cannot reshape array of size 10 into shape (1,5,10)
这表明你的数据形状与模型的期望不匹配。
你可以改变数据的形状或改变模型的期望。
你好 Jason,
感谢您提供出色的教程。我只想知道如何计算 LSTM 的计算复杂度?
提前感谢。
抱歉,我没有关于计算神经网络计算复杂度方面的资料。
我想通过分类来预测句子的类别,但在这里我需要知道,在进行模型预测时,如果一个句子已经被提供给模型进行预测,即使是第一次,我也需要知道你已经预测过这个句子。
请就此问题提出建议,这对聊天机器人应用很有用,如果一个问题在对话中已经被问过,用户再次问同一个问题,我需要知道你以前已经问过这个问题。
也许可以添加一个 if 语句,在将句子传递给模型进行预测之前,先在哈希表中查找该句子。
听起来像是工程问题,而不是机器学习问题。
感谢您的回答
X=[x =21, x1=13, ‘grassMinTemp’=15]
yhat = model.predict(X, verbose=0)
print(yhat)
我应该这样做吗?
不,输入是一个数字数组,就像训练数据一样,例如 X = [21, 13, 15]
如果 LSTM 模型中有多个因变量,我该怎么办?
X = [x1=12,x2=1234]
model =the path of the model
yhat = model.predict(X)
谢谢
我在这里给出了一个例子
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
你的模型出现了这样的错误,我该如何解决?
使用 TensorFlow 后端。
回溯(最近一次调用)
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in
from tensorflow.python.pywrap_tensorflow_internal import *
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 28, in
_pywrap_tensorflow_internal = swig_import_helper()
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 24, in swig_import_helper
_mod = imp.load_module(‘_pywrap_tensorflow_internal’, fp, pathname, description)
File “C:\Python36\lib\imp.py”, line 242, in load_module
返回 load_dynamic(name, filename, file)
File “C:\Python36\lib\imp.py”, line 342, in load_dynamic
返回 _load(spec)
ImportError: DLL 加载失败:找不到指定的模块。
处理上述异常时,发生了另一个异常
回溯(最近一次调用)
File “D:/lstm_model.py”, line 1, in
来自 keras.models import Sequential
File “C:\Python36\lib\site-packages\keras\__init__.py”, line 3, in
from . import utils
File “C:\Python36\lib\site-packages\keras\utils\__init__.py”, line 6, in
from . import conv_utils
File “C:\Python36\lib\site-packages\keras\utils\conv_utils.py”, line 9, in
from .. import backend as K
File “C:\Python36\lib\site-packages\keras\backend\__init__.py”, line 89, in
from .tensorflow_backend import *
File “C:\Python36\lib\site-packages\keras\backend\tensorflow_backend.py”, line 5, in
import tensorflow as tf
File “C:\Python36\lib\site-packages\tensorflow\__init__.py”, line 24, in
from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
File “C:\Python36\lib\site-packages\tensorflow\python\__init__.py”, line 49, in
from tensorflow.python import pywrap_tensorflow
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 74, in
raise ImportError(msg)
ImportError: 回溯(最近一次调用)
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in
from tensorflow.python.pywrap_tensorflow_internal import *
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 28, in
_pywrap_tensorflow_internal = swig_import_helper()
File “C:\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 24, in swig_import_helper
_mod = imp.load_module(‘_pywrap_tensorflow_internal’, fp, pathname, description)
File “C:\Python36\lib\imp.py”, line 242, in load_module
返回 load_dynamic(name, filename, file)
File “C:\Python36\lib\imp.py”, line 342, in load_dynamic
返回 _load(spec)
ImportError: DLL 加载失败:找不到指定的模块。
未能加载原生 TensorFlow 运行时。
请参阅 https://tensorflowcn.cn/install/errors
了解一些常见原因和解决方案。寻求帮助时请包含整个堆栈跟踪
此错误消息上方。
听到这个消息我很难过,也许 tensorflow 没有正确安装?
也许可以尝试重新安装?
也许可以尝试 theano?
我没有找到关于此模型中预测的清晰信息。我的疑问是,如何在没有测试数据的情况下预测未来值。假设我们有一个单一变量数据集(2012 年 1 月 - 2015 年 12 月),我们如何获得 2016 年 1 月至 2016 年 12 月的值?请帮助我。预先感谢。
yhat = model.predict(X)
X 会是什么?
它将是你的模型期望的输入,例如,一个样本数组。
你好,杰森,
与上述问题相同,我仍然有一个问题,即预测时我需要为输入 x 提供什么值。这里你提到了“将是你的模型期望的输入,例如,一个样本数组”,
我输入了训练数据,其长度为 2708,它给出了相同的预测值长度为 2798。这里我想要确认,预测值是什么??
我该如何假设它??
提供给模型的输入取决于你如何准备数据和定义模型。
如果你训练的模型是接受 7 天的输入来预测一天,那么你需要提供过去 7 天的数据来获得下一天的输出。
你好 Jason,
假设时间序列是 1,2,3,4,5,6,7,8……。
如果我们想使用 LSTM 预测时间序列中的下一个数据点(例如第 9、10、11 个……)。
该怎么做?
model.predict(X) X 是什么?
这取决于你如何构建你的问题。
如果模型需要 3 个输入来预测 1 个输出,而这 3 个输入是前 3 个观测值,那么
这有帮助吗?
嗨 Jason,抱歉不请自来。我处于相同的位置,对我来说,模型确实有效,只要 X 中有数据,而没有预测未来。在你上面的例子中,对 X = asarray([[[6],[7],[8]]]) 的预测将绘制一条跟随这些值的曲线,而不是跟随值的预测。我寻找的 model.predict(X) 是对尚不存在并且没有真实数据绘图值的预测。如果今天是 10 月 2 日,我想预测未来 7 天的股票开盘价(那时还没有实际值),这该如何实现?用完整数据集的最后 x 步填充 X 只会返回对最后 x 步的良好预测,而这些我已经知道了……谢谢!
你可以执行多步预测。例如,你设计一个输出 n 个预测的模型。
请参阅本教程以开始
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
谢谢 Jason。我还没有走到那一步,我会回顾你的教程。做得很好!
谢谢。
嗨 Jason,
例如,如果我想预测货币的价值,那么我的序列将是日期吗?
不,是观察值出现在那些日期。
你好,Jason!
为了降低方差,我使用了你另一篇教程中“fit_lstm”函数创建的三个不同模型的平均预测值,并且得到了更好的结果。
forecast1 = model1.predict(test_reshaped, batch_size=batch_size)
forecast2 = model2.predict(test_reshaped, batch_size=batch_size)
forecast3 = model3.predict(test_reshaped, batch_size=batch_size)
但是,我能否将它们保存为“一个”模型以供将来使用?
干得不错。
你可以创建一个多输入模型来组合这三个模型的预测结果。
也许这会是一个好的起点
https://machinelearning.org.cn/stacking-ensemble-for-deep-learning-neural-networks/
嗨 Jason,我需要问一下如何从模型中预测接下来的1000个数据?
我的意思是,如果我保存了一个具有8000个窗口大小的模型,并且总数据量是12000,当我使用模型时,它需要8000个窗口大小,而我无法创建形状,如何预测这4000个数据?
def create_dataset(dataset, look_back = 1)
data_X, data_Y = [], []
for i in range(len(dataset) – look_back – 1)
a = dataset[i:(i + look_back), 0]
data_X.append(a)
data_Y.append(dataset[i + look_back, 0])
return(np.array(data_X), np.array(data_Y))
你能帮我一下吗,我总是因为形状而出错,该如何预测接下来的4000个数据?
谢谢你
抱歉,我没跟上。
也许你可以详细说明一下?
你可以开发一个模型一次预测1000个步长,或者使用递归策略。
我在此列出了一些方法
https://machinelearning.org.cn/faq/single-faq/how-do-you-use-lstms-for-multi-step-time-series-forecasting
你好 Jason,
我开发的模型在测试集上的表现非常好。但预测时的性能却下降了。这是过拟合问题吗?您能否告诉我如何解决这个问题?
会不会是因为我将LSTM用于小数据集(<300个数据点)?
也许可以。
这里的教程将帮助你诊断模型的各种问题。
https://machinelearning.org.cn/learning-curves-for-diagnosing-machine-learning-model-performance/
嗨,Jason,
我正尝试使用我的LSTM进行未来预测,但我的训练数据包含未来X输入(例如,股票价格)无法获得的功能。有哪些方法可以解决这个问题,同时还能进行未来预测?
谢谢。
用你拥有的数据来构建预测问题。例如,你打算如何使用模型应该决定问题的构建方式。
嗨,Jason,
我尝试在实际案例中实施此教程并预测了100个未来时间步长(在单一变量场景下)。
作为下一步,我包含了一些季节性虚拟变量和其他预测变量。为了预测100个未来时间步长,我使用了以下代码
# 未来未知预测:在这种情况下,test_set不存在
future_pred_count = 100 # 预测100个新步长
model.reset_states() # 输入新序列时始终重置状态
# 首先,我们设置模型的状态(这对于它了解之前的趋势很重要)
predictions = model.predict(previous_inputs) # 这会创建状态
# 未来预测
future = []
currentStep = predictions[:,-1:,:] # 前一个预测的最后一个步长
for i in range(future_pred_count)
currentStep = model.predict(currentStep) # 获取下一个步长
future.append(currentStep) # 存储未来步长
# 处理完序列后,为了安全起见重置状态
model.reset_states()
但我遇到了一个错误 IndexError: too many indices for array。如果您能提供帮助,将不胜感激。
也许从这个更简单的教程开始
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
请忽略我之前的问题。
您能否帮助我使用本文训练的LSTM模型预测未来的销量?这将非常有帮助。
https://towardsdatascience.com/predicting-sales-611cb5a252de
在这篇文章中,预测是基于数据集中的时间段完成的,并且所有特征都可用,但我想为未来的日期进行预测。
期待您的回复。
也许如果你对那篇文章有疑问,可以联系作者?
一般来说,你可以在这里学习如何进行样本外预测。
https://machinelearning.org.cn/make-sample-forecasts-arima-python/
嗨,Jason,
如果我的训练数据中有3个文件,测试数据中有1个文件。
并且文件中存在监督数据,其中包含时间 t 和 t-1 时间戳的粘度和温度。我能否预测测试集在某个时间点的温度和对数粘度?
我的数据是按时间生成的,我需要在某个时间点预测此时的粘度和温度。我可以通过将数据分为75%训练和25%测试来在一个文件中做到这一点。但是,如果我想要在3个这样的文件中训练我的模型,并在1个文件中进行测试呢?对于时间序列数据来说,这是否可行?
我认为是的,也许可以尝试一下看看什么可行?
你好,
我如何分割时间序列数据集来预测未来7天?
这个教程会有帮助
https://machinelearning.org.cn/convert-time-series-supervised-learning-problem-python/
嗨,Jason,
LSTM模型在不同的运行中会产生不同的输出,除非你设置一个种子。在这种情况下,应该如何决定使用哪个模型(基本上是哪个权重)?
正确。
使用模型在多次训练运行中的平均性能。
好的,就像你在其中一篇教程中演示的那样。谢谢 Jason。
谢谢。
嗨,Jason,
这是我用于从我保存的LSTM模型进行预测的代码。
数据集是带标题和索引列的一行输入,即
0 0 0 0 0 0 0 0 0 26.1 5.201
我想预测最后一列,最多预测2个时间步长。(t和t+1)。我按照这个逻辑编写了LSTM模型代码。
预测代码
dataset = read_csv(‘predict.csv’, header=0, index_col=0)
dataset.columns = [‘Ambewela’, ‘Annfield’, ‘Campion’,’Helboda’,’Holmwood’,’Hatton Police Station’, ‘Labukelle’,’Sandringham’,’Watawala’, ‘El – Nino’, ‘Inflow’]
dataset.index.name = ‘Date’
print(“#################test1###############”)
print(dataset.head())
values = dataset.values
groups = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 归一化特征
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
print(“#################test6###############”)
print(scaled)
days=1
test_X = scaled[:days, :]
print(“#################test9###############”)
print(test_X)
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
# 从单个文件加载模型
model = load_model(‘modelTest.h5’)
yhat = model.predict(test_X)
print(“#################test10###############”)
print(yhat)
#test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))
inv_yhat = concatenate((yhat, test_X), axis=1)
inv_yhat = scaler.inverse_transform(inv_yhat)
inv_yhat = inv_yhat[:,0]
print(“#################test11###############”)
print(inv_yhat)
但我注意到数据集的 0,1 min max scaler 值全为零。
这是我得到的结果
[1 rows x 11 columns]
#################test6###############
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
#################test9###############
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
#################test10###############
[[0.24231862]]
回溯(最近一次调用)
File “”, line 1, in
runfile(‘F:/documents/Final Year Project/2 python test code/load model.py’, wdir=’F:/documents/Final Year Project/2 python test code’)
File “F:\software\anaconda 3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 786, in runfile
execfile(filename, namespace)
File “F:\software\anaconda 3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File “F:/documents/Final Year Project/2 python test code/load model.py”, line 60, in
inv_yhat = concatenate((yhat, test_X), axis=1)
ValueError: all the input arrays must have same number of dimensions
我想知道 minmax scaler 出了什么问题,为什么我只得到一个输出?
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code
Jason 博士您好
谢谢您的教程,它真的很有趣。我只是想知道,是否有可能让LSTM预测的输出不是一个清晰的值?换句话说,如果我需要预测5个不同的类别,我希望结果是归属度,例如,第一个类别的60%,第二个类别的20%,依此类推。
提前感谢
是的,你可以使用 predict() 而不是 predict_classes() 来预测概率。
请参阅这里的示例。
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
嗨 Jason
非常感谢您回答我的问题,我真的很感激。我还想知道,是否也可以使用CNN而不是LSTM来进行相同的概率预测,并获得相同的输出向量?
提前感谢
是的。
博士您好,抱歉,我是个新手
您在哪里精确定义了 yhat?我的意思是,我有模型,我想用一个句子进行预测
我的模型是 seq2seq 模型
yhat 是调用 predict() 时模型的输出。
输出就是你训练模型所期望得到的结果。
Jason 博士您好!
我仍在互联网上搜索并尝试找到解决方案,但找不到。
我有一个用 Keras 构建的机器翻译 seq2seq 模型,现在我想进行预测。
但我遇到了一个奇怪的错误,我不知道确切的错误是什么,以及它与我的模型的形状有什么关系。
代码
model = load_model(‘model.h5’)
single_x_test = [‘how are you’]
model.predict(np.array(single_x_test, ndmin=0))
错误
model = load_model(‘model.h5’)
single_x_test = [‘how are you’]
model.predict(np.array(single_x_test, ndmin=0))
我没有看到错误。或许可以尝试在 stackoverflow 上发布你的代码。
嗨,Jason,
我很欣赏你的工作。非常有帮助。我已经训练并测试了一个 CNN-LSTM 模型,但我在使用保存的 .h5 模型文件通过网络摄像头进行实时预测时遇到了问题。如果您能就此提供指导,将不胜感激。
此致
谢谢!
是的,请看这个
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
嘿 Jason,你的教程非常棒!!
我有一个简单的问题,你是否有关于预测时间序列问题中的未来数据(我的意思是生成数据集中没有的新日期)的例子?
再次感谢您所有的解释!!
上面的教程正是探讨了这一点。
嗨,Jason,
1、你上面的例子使用了 time_steps = 1。现在,我有一个新的数据点(例如
0.5),我需要将其重塑为 [1,1,1] 并进行预测。这样对吗?
2、还有一问:上面例子中,你没有转换任何数据。我的意思是,对于一些训练
数据,比如股票价格,我们需要使用 Minmax(范围0到1)或 Standard 来缩放数据。现在
我们有了当前价格(例如 118.12,不在(0,1)范围内)。我们如何预测明天的价格?
谢谢!
不,输入形状应与模型的预期相匹配。
是的,在建模之前对数据进行缩放可能是一个好主意,并且应用于训练数据集的任何缩放都应该应用于新数据。
是的,但是时间步长为1表示我们预测的是下一天,样本形状为[1,1,1]。那么,只有一个点的情况下如何缩放数据?
抱歉,我不明白。也许你可以重新表述你的问题?
抱歉 Jason,
我的意思是,如果模型需要3个输入来预测1个输出,那么
1. 这是不可能的吗?
2. 例如 X_train = [ [6], [7], [8] ],我们希望结果为 Predict Y_train = [ [7], [8], [9] ],但在数据处理阶段,我们对数据进行缩放 X_train = scaler.tranform(X_train)。现在,我们有了新数据 a = [9],如何进行预测?
谢谢!
如果模型需要3个输入,那么在训练和推理过程中,你必须提供3个输入。
不,我的意思是 X_train 的形状是 [n,1,1]。我用 standard transform 对 X_train 进行缩放,并希望以 [n,1,1] 的形状进行预测。现在有了新数据 [1,1,1],如何进行预测?
直接调用即可,例如:
请告诉我如何使用模型来预测未来的日期。
你可以通过调用 model.predict() 来进行预测,更多帮助请参阅此文。
https://machinelearning.org.cn/make-predictions-long-short-term-memory-models-keras/
还有这个。
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
嗨,Jason,
非常棒的教程和解释。
我正在使用多变量 LSTM 方法,包含多个 LSTM 层,以及用于时间序列数据的自注意力机制。我有60个时间戳,12个变量,以及大约30k个样本。我使用这些数据来预测时间戳65的涨幅。涨幅定义为时间戳60的收盘价与时间戳65的收盘价之间的百分比差。这被定义为目标变量。在这种情况下,LSTM并没有真正用于预测未来,而是用于预测一个特定的目标变量。因此,我认为我没有充分发挥LSTM的潜力。
假设我想让模型知道这12个变量中的11个变量会影响收盘价,然后使用LSTM预测时间戳65的收盘价。我该如何实现?简而言之,如何告诉模型11个特定变量会影响收盘价,并基于此,时间戳65的收盘价预测是多少?
提前感谢,
Daniel
谢谢。
你其实不必这么做。你向模型提供你认为最相关的最相关的数据,让它学习哪些数据影响最大以及以何种方式影响。这被称为函数逼近。
https://machinelearning.org.cn/neural-networks-are-function-approximators/
好
谢谢!
嗨,Jason,
感谢您精彩的帖子。当真实结果对序列未知时,我该如何看到未来?我找不到关于这个问题的任何东西。
例如;我的数据集在2018-2019年之间,但我希望看到2020年的预测。
是的,模型会预测未来的观测值,你可以直接在应用中使用它们。
如果你在进行预测时遇到困难,请参阅此示例。
https://machinelearning.org.cn/make-predictions-long-short-term-memory-models-keras/
谢谢你的回答,Jason。
I
不客气。
感谢您的帖子,但如何使用 GUI 训练模型?
我想你可以写自己的 GUI。
您好,我有一个数据集。
在时间0 - 3行4列
在时间1 - 3行4列
我想预测
在时间2
最后一个元素、最后一列的值。
也许这能帮助你准备数据。
https://machinelearning.org.cn/convert-time-series-supervised-learning-problem-python/
嗨,Jason,
感谢您的帖子。您关于深度学习的教学非常有帮助!
我正在实现一个RNN模型,根据前一个输出(1个时间步长)和3个输入来预测输出。
在您的帖子“使用Keras进行多变量时间序列预测”中,您教我们使用前一个输出作为输入之一。但是,我们的输出“变量1”在开始时是空白的。预测之前我们不知道输出。
在这种情况下,我们该如何为预测准备输入和输出?
例如,var1是输出,var2、var3和var4是输入。
var1[t-1]、var2[t-1]、var3[t-1]和var4[t-1]用于预测var1[t]
但是,我只有一个初始的var1值,即8*10^6。
在预测期间,我该如何用预测的输出更新var1[t-1]的值?
不更新的话,除了第一行,所有var1的行都会是NAN(非数字)。我的模型无法预测NAN。
对于缩放(0~1),只有一个初始值也是个问题。
我的 RNN_save_model.py 基本上与您在“使用Keras进行多变量时间序列预测”中的代码相同。在训练和测试时没有问题,因为训练数据中已经知道了 var1(输出)。
感谢您的时间!
第一行必须移除,因为没有先前的观测值。
感谢您的回复。
我的问题可能不够清楚。
我对于如何使用RNN将输出反馈到输入感到困惑。
我需要 var1[t-1], var2[t-1], var3[t-1] 和 var4[t-1] 来预测 var1[t]。
然而,var1[t-1] 在 var1[t-1] 通过 var1[t-2] 预测出来之前是未知的。
我只有初始值 var1[0]。var1[1]、var1[2]、var[3]……在预测完成后才未知。
var2、var3 和 var4 已经已知。
我的目标是使用 LSTM 预测 var1。
你可以手动一次处理一个样本。例如,先预测,然后构建下一个样本,然后预测。这被称为递归模型。
感谢您的回复!
如果我使用递归模型,在保存模型之前,我是否可以保持与训练和测试相同的方法?
我是否应该使用另一种方法来训练和测试模型?
我正在使用与此帖子相同的代码来训练和测试我的模型: https://machinelearning.org.cn/multivariate-time-series-forecasting-lstms-keras/#comment-540267
你可以假设我正在使用上述链接中的相同代码,通过保存和加载此帖子中的方法来进行预测。
我建议以与您打算使用的方式相同的方式来评估模型。
Hi Jason,感谢您的建议
我尝试用 LSTM 模型进行预测,并将先前预测的输出反馈给当前输入。
然而,我无法反转预测的缩放,因为我只有输出的初始值(8*10^6)。我用它来预测下一个输出,并用下一个输出来预测更远的输出。还有其他已知的输入数据,如温度和湿度。
我们将输出称为“刚度”。stiffness(t) 是输出,stiffness(t-1) 是预测stiffness(t)的输入之一。
刚度的初始值在0到1的缩放中被缩放到0,因为一开始在10000个样本中只存在第一个样本。
结果是,在预测和反向缩放之后,它总是给我一个8*10^6的水平线。
在这种情况下,我如何将0到1之间的缩放恢复到原始缩放?
一个想法是手动运行转换以了解正在发生什么,并确保您在两次都以相同的形式应用它。
尊敬的Brownlee先生,
感谢您这篇精彩的文章。我尝试遵循这里和其他地方提到的一些步骤,并构建了一个模型,但遇到了一些问题,这些问题我在下面的堆栈溢出问题中已经提到:
https://stackoverflow.com/questions/63318474/training-output-drops-to-0-after-fixed-timesteps-
and-again-retrains-in-lstm-mode
如果您能看一下并帮助我,我将不胜感激。
此致,
Gopal。
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/can-you-comment-on-my-stackoverflow-question
Jason你好!很棒的教程。我有一个问题,如果我的训练数据是这种格式,我该如何尝试重用KERAS?
[
[2, 5, 6, 15, 22],
[12, 8, 2, 33, 44],
…
]
通常是5个数字,每个数字在1-49之间。
也许这会有帮助。
https://machinelearning.org.cn/faq/single-faq/what-is-the-difference-between-samples-timesteps-and-features-for-lstm-input
我如何使用lstm预测未来20天,你能简要解释一下吗?
是的,有多重预测方法,例如,这提供了模型概述
https://machinelearning.org.cn/multi-step-time-series-forecasting/
本教程提供了一些LSTM模型,您可以将其用作起点
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
我有一个问题。
LSTM将使用训练和测试数据进行训练,我如何修改代码来预测未来10个时间步的值?
请参阅上面关于如何进行预测的教程。
嗨,
我终于完成了我的两层LSTM模型用于回归问题,但现在当我预测新输入时,模型为许多输入提供了相同的输出值。如何纠正?
另一个疑问是,对于相同的输入,模型在不同时间给出不同的输出。
抱歉,我不明白你的模型可能存在什么问题,也许你可以详细说明一下你的问题?
是的,LSTM有内部状态,并且可以根据内部状态给出不同的输出。你必须注意在序列结束时或在适当的时候管理/重置状态。
你好,你能告诉我如何给出一个单一向量并从上述LSTM网络获得预测吗?
是的,调用model.predict()并传递一个样本。
这可能有帮助
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
尊敬的Brownlee先生
我有一个找不到答案的问题。如果我用LSTM层训练我的模型来预测下一个值,基于,比如说,20个前的值,如果我输入一个大小为7(比必需的要小)的输入给训练好的模型,它会给我“错误”的结果吗?我试了一下,得到了这个:
WARNING:tensorflow:Model was constructed with shape (None, 20, 1) for input Tensor(“lstm_input:0”, shape=(None, 20, 1), dtype=float32), but it was called on an input with incompatible shape (None, 7, 1)
所以它给了我输出,但是我的LSTM是否像它“应该”的那样根据这7个值进行预测,或者会出现某种噪声来弥补数据的不足?我不知道我的问题是否有意义,但我真的很希望您能回答。我正在尝试预测音乐片段中的下一个音符,如果我可以输入更少的音符并仍然获得相关结果,那将是很棒的。
是的,你必须设计你的模型来接受在需要进行预测时可用的数据大小/形状。
谢谢您的回复!
不客气。
你好 Jason,
对于seq2seq模型(https://machinelearning.org.cn/develop-encoder-decoder-model-sequence-sequence-prediction-keras/),在创建了推理模型之后,我注意到我们必须自己定义一个predict_sequence函数来进行预测。
为什么我们不能使用Keras的内置函数,就像这里使用的predict_classes()一样?
你好Echo……这是为了演示目的。我鼓励你也研究一下使用Tensorflow/Keras函数。
嗨,Jason,
感谢您发布这篇有趣的文章。
我使用滑动窗口将我的序列转换为监督学习问题。我输入了过去5分钟的观察结果,我的模型预测下一分钟。在我需要使用新数据重新训练模型之前,我可以进行多少次预测?
你好Ron……以下资源可能让你感兴趣
https://machinelearning.org.cn/update-neural-network-models-with-more-data/
尊敬的Brownlee先生。感谢您的教程。
我加载了一个我之前训练并保存的LSTM模型
model = tf.keras.models.load_model(‘model_x.h5’, compile=False)
我尝试预测一个数据集
y = model.predict(X)
输入是
X = [x1(t-n), x2(t-n), y(t-n)
…
x1(t-1), x2(t-1), y(t-1)]
输出(我想预测的)是
y = [y(t-n+1)
…
y(t)]
如果实际输出是y,预测输出是yp,哪个陈述是正确的?
a) 网络使用X的第一行(x1(t-n), x2(t-n), y(t-n))来预测输出(yp(t-n+1)),然后使用X的第二行(x1(t-n+1), x2(t-n+1), y(t-n+1))来预测yp(t-n+2),依此类推。
b) 网络使用X的第一行(x1(t-n), x2(t-n), y(t-n))来预测输出(yp(t-n+1)),然后使用该输出(yp(t-n+1))来预测yp(t-n+2),依此类推。
你好sobhan……以下资源可能有所帮助
https://machinelearning.org.cn/start-here/#deep_learning_time_series