如何在 Keras 中使用长短期记忆模型进行预测

开发LSTM模型的最终目标是获得一个可以用于序列预测问题的最终模型。

在本帖中,您将了解如何最终确定您的模型并使用它来对新数据进行预测。

完成这篇文章后,您将了解:

  • 如何训练一个最终的LSTM模型。
  • 如何保存您的最终LSTM模型,并在之后重新加载它。
  • 如何对新数据进行预测。

通过我的新书 《Python LSTM网络》,以“分步教程”和所有示例的“Python源代码”文件,为您的项目打下坚实的基础

让我们开始吧。

How to Make Predictions with Long Short-Term Memory Models with Keras

如何使用Keras中的长短期记忆模型进行预测
图片来源:damon jah,部分权利保留。

第一步:训练最终模型

什么是最终LSTM模型?

最终LSTM模型是指您用于对新数据进行预测的模型。

也就是说,给定新的输入数据示例,您希望使用该模型来预测预期的输出。这可能是一个分类(分配一个标签)或一个回归(一个实数值)。

您的序列预测项目的目标是获得一个表现最佳的最终模型,“最佳”的定义取决于:

  • 数据:您拥有的历史数据。
  • 时间:您在该项目上可花费的时间。
  • 流程:数据准备步骤、算法或算法,以及选择的算法配置。

在您的项目中,您收集数据,花费您拥有的时间,并发现数据准备流程、要使用的算法以及如何配置它。

最终模型是这个过程的顶峰,是为了开始实际进行预测而追求的终点。

没有所谓完美的模型。只有您能够发现的最佳模型。

如何最终确定LSTM模型?

您可以通过将选择的LSTM架构和配置应用于您的所有数据来最终确定模型。

这里没有训练集和测试集的划分,也没有交叉验证的折叠。将所有数据重新组合成一个大的训练数据集,并拟合您的模型。

就是这样。

使用最终确定的模型,您可以:

  • 将模型保存以供将来或生产使用。
  • 加载模型并对新数据进行预测。

有关训练最终模型的更多信息,请参阅

需要 LSTM 帮助进行序列预测吗?

参加我的免费7天电子邮件课程,了解6种不同的LSTM架构(附代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

第二步:保存您的最终模型

Keras提供了一个API,允许您将模型保存到文件

模型以HDF5文件格式保存,该格式能够有效地将大型数值数组存储在磁盘上。您需要确认已安装h5py Python库。可以按以下方式安装:

您可以使用模型上的save()函数将已拟合的Keras模型保存到文件。

例如

此单个文件将包含模型架构和权重。它还包括所选损失函数和优化算法的规范,以便您可以继续训练。

可以使用load_model()函数再次加载模型(从不同的Python会话中的不同脚本)。

下面是一个完整的示例,展示如何拟合LSTM模型,将其保存到单个文件,并在之后重新加载。虽然模型的加载在同一个脚本中,但此部分可以从另一个Python会话中的另一个脚本运行。运行示例会将模型保存到文件lstm_model.h5。

有关保存和加载Keras模型的更多信息,请参阅

第三步:对新数据进行预测

在最终确定模型并将其保存到文件后,您可以加载它并使用它进行预测。

例如

  • 在序列回归问题上,这可能是预测下一个时间步的实数值。
  • 在序列分类问题上,这可能是给定输入序列的类别结果。

或者,根据序列预测问题的具体情况,这可能是任何其他变体。您希望在给定输入序列(X)的情况下,从模型中获得一个结果(yhat),而该序列的真实结果(y)目前是未知的。

您可能对在生产环境中进行预测感兴趣,作为界面的后端,或者手动进行。这实际上取决于您项目的目标。

在将最终模型拟合之前对训练数据执行的任何数据准备工作,也必须应用于任何新数据,然后再进行预测。

预测是简单的事情。

这涉及到获取准备好的输入数据(X),并在加载的模型上调用Keras的预测方法之一。

请记住,用于进行预测的输入(X)仅包含进行预测所需的输入序列数据,而不是所有先前的训练数据。在预测一个序列中的下一个值的情况下,输入序列将是1个样本,具有在定义和拟合模型时使用的固定时间步长和特征数。

例如,通过在模型上调用predict()函数,可以做出形状和尺度与输出层激活函数相同的原始预测。

通过在模型上调用predict_classes()函数,可以预测类别索引。

通过在模型上调用predict_proba()函数,可以预测概率。

有关Keras模型生命周期的更多信息,请参阅

进一步阅读

如果您想深入了解此主题,本节提供了更多资源。

文章

API

总结

在本帖中,您了解了如何最终确定模型并使用它来对新数据进行预测。

具体来说,你学到了:

  • 如何训练一个最终的LSTM模型。
  • 如何保存您的最终LSTM模型,并在之后重新加载它。
  • 如何对新数据进行预测。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

立即开发用于序列预测的 LSTM!

Long Short-Term Memory Networks with Python

在几分钟内开发您自己的 LSTM 模型。

...只需几行python代码

在我的新电子书中探索如何实现
使用 Python 构建长短期记忆网络

它提供关于以下主题的自学教程
CNN LSTM、编码器-解码器 LSTM、生成模型、数据准备、进行预测等等...

最终将 LSTM 循环神经网络引入。
您的序列预测项目。

跳过学术理论。只看结果。

查看内容

172条对如何使用Keras中的长短期记忆模型进行预测的回复

  1. Klaas Brau 2017年8月30日凌晨2:03 #

    谢谢 Jason

    一个问题。为什么我们要用所有数据来最终确定模型?我们不是会再次改变权重吗?在训练数据上训练的模型是我们测试过的未见过的数据(测试集)。新模型(用所有数据训练)可能会更糟,过拟合……是吗?

  2. ketan 2017年9月14日晚上7:02 #

    我同时尝试了keras和tensorflow。Tensorflow有更多功能。

  3. tieliu 2017年10月13日晚上6:53 #

    谢谢,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 Brownlee 2017年10月14日凌晨5:43 #

      问题究竟是什么?

      • Kingsley Udeh 2018年6月29日早上10:31 #

        嗨,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时失败了。在这种情况下,我们是否可以说应该丢弃最终模型,然后决定用另一组不同的流程和配置来训练模型?

        抱歉,这个问题比预期的长一些,但我想澄清最初的问题,因为没有进一步的讨论。

        • Jason Brownlee 2018年6月29日下午3:26 #

          抱歉,我不明白,为什么我们要丢弃模型?

          • Kingsley Udeh 2018年6月29日晚上7:25 #

            因为并非所有预测值都等于实际值(如yhat和y之间的比较所示),或者我错过了您教程中的某个重要概念?

          • Jason Brownlee 2018年6月30日凌晨6:06 #

            没有模型是完美的。如果完美是可能的,我们就不会需要机器学习。

          • Kingsley Udeh 2018年6月30日早上11:12 #

            明白了!非常感谢。

            顺便问一下:我们如何展示或说明一个模型是好的?我们是否只关心分数,例如,回归问题?

          • Jason Brownlee 2018年7月1日凌晨6:22 #

            正确。

  4. Fawad 2017年10月16日晚上9:27 #

    你好,我想预测一个形状为(160, 72)的完整记录,为单个时间步。如何为测试设置我的numpy数组特征?为了更清楚地理解,我在形状为(235, 1, 72)的trainX和形状为(235,)的trainY上训练了我的模型。现在我想预测一个时间步,但针对160行。如何做到?

    • Jason Brownlee 2017年10月17日凌晨5:45 #

      请参阅此帖,了解如何为LSTM重塑数据
      https://machinelearning.org.cn/reshape-input-data-long-short-term-memory-networks-keras/

      • Ryan 2019年1月7日晚上9:20 #

        你好 Jason,

        感谢您提供的精彩教程。它帮助我训练了一个预测能源模式的模型。

        但是,我对将其投入实时预测生产站点感兴趣,并想知道以下问题:

        1.我计划使用Flask将上述训练好的模型发布为API,以便在实时网站上生成预测。这是部署的合适工具选择吗?

        2.我已经重塑和缩放了我的原始数据来生成模型……这意味着我将需要重塑和缩放所有未来的数据,然后才能将其拟合到训练好的模型中,以便它输出相关的预测吗?

        谢谢,并感谢您对我上述问题的回复!

        • Jason Brownlee 2019年1月8日凌晨6:49 #

          工具和框架在生产中的选择实际上是您和您的利益相关者应该做出的决定。我无法有意义地评论,因为我不会对该决定负责。

          在未来应用于模型的所有数据准备工作,都必须应用于新的数据。

  5. joseph 2018年2月26日下午2:59 #

    嗨,Jason,

    在执行model.predict时,我确实得到了一些不一致的输出。这是否意味着我的模型是错误的?据我所知,不一致输出的可能情况是,如果我尝试重新拟合模型,而不是在预测期间。我是否遗漏了什么?希望得到您的评论。非常感谢。

  6. Maryam 2018年3月18日早上8:36 #

    嗨,Jason,
    我非常感谢您分享的帖子。
    我只想在一个脚本中同时加载3个最终模型,分别是RNN、CNN、LSTM,它们已经保存为Keras的最终模型,用于在集成模型中获得平均结果进行预测。是否必须使用dask数据帧来加载多个最终(保存的模型)模型??或者加载多个最终模型与加载单个最终模型的命令相同?
    提前感谢您抽出时间回复。

    • Jason Brownlee 2018年3月19日凌晨6:02 #

      不需要Pandas DataFrame。每个模型都可以保存和加载到不同的文件中,并用于集成。

  7. Delaram 2018年4月2日早上7:25 #

    嗨,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)),并且它运行正常。

    这些命令导致错误的问题是什么??
    我该如何修复这些错误?

    • Jason Brownlee 2018年4月2日 下午2:47 #

      我认为这些方法仅支持 Sequential 模型,你可能使用的是 Functional Model API。在这种情况下,你可能仅限于 predict() 函数,对于输出层中的 softmax 激活函数,它将返回概率。

  8. Fredrik Nilsson 2018年4月4日 上午6:27 #

    这太棒了 Jason!

    谢谢你的文章🙂

  9. Bastien 2018年4月19日 上午2:24 #

    嗨,Jason,

    感谢您提供的非常有用的教程。

    我有一个问题。我认为我在进行预测时缺少了一些东西。我不明白 model.predict(X) 的输入应该是什么来预测新数据。假设我有一年的数据(每小时采样一次),我想预测接下来的一周。我的 X 应该是什么?

  10. ata 2018年5月2日 上午7:26 #

    你好,这是一个非常好的解释,但我想问 verbose 的作用是什么?为什么我们将其设置为 0?

    • Jason Brownlee 2018年5月3日 上午6:27 #

      Verbose 提供输出。我们可以通过将其设置为 0 来关闭此输出。

  11. Francisco 2018年6月6日 晚上11:46 #

    嗨 Jason,感谢您的教程。我非常感谢我从您那里学到的东西。

    我有一个问题。假设我有一个 LSTM 模型,并且它在训练和测试数据上都能正常工作,那么模型就可以投入生产了。我的数据具有以下特征:时间戳、价格和市值。如果我想预测明天的价格,我必须
    提供时间戳和市值的值吗?还是只需要时间戳?

    • Jason Brownlee 2018年6月7日 上午6:29 #

      要进行一次预测,它必须提供一个输入序列,正如你在训练过程中所定义的那样。

  12. SM 2018年6月12日 上午12:42 #

    嗨 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。不确定为什么,以及是否不正确。

    再次非常感谢。

  13. SM 2018年6月12日 上午12:48 #

    嗨 Jason,我有一个问题:“验证方案应该用来估计模型的质量。当你找到正确的超参数并想要获得测试预测时,别忘了使用所有训练数据重新训练你的模型。”

    模型使用验证集训练后,我是否应该使用所有训练数据重新训练模型?

    谢谢你。

  14. Hamied 2018年6月19日 晚上11:17 #

    嗨,Jason,
    我有一个与实时验证相关的问题,如果你有输入测试数据(每毫秒 60 帧)并且你想实时进行预测。你怎么能确保预测会完成?

    另一方面,假设我们正在接收输入测试数据(100 x 162),时间戳 x 特征。我们将所有信息放入一个样本数组(1,100,162,1)中,然后你想在收到数据时为每个时间实例进行预测。问题是流式数据集太快,模型无法跟上
    y_predict = model.predict_classes(test_input)
    我想知道你对此类问题有什么建议吗?关于如何使实时流式数据对每次输入变化都能进行预测?

    如果你以这种速度运行(预测将继续处理旧数据集。无法跟上新样本)

    提前感谢

    • Jason Brownlee 2018年6月20日 上午6:27 #

      进行预测速度非常快。

      只有训练模型是慢的,这只会在使用模型之前进行一次。

  15. Maryam 2018年6月23日 上午6:25 #

    嗨,Jason,
    感谢您一如既往的精彩和实用的教程。
    我遇到一个问题,即如果要使用 predict(x_dataset) 函数,是否必须填充“x_dataset”?
    如果您回答这个问题,我将不胜感激。
    此致
    Maryam

    • Jason Brownlee 2018年6月24日 上午7:25 #

      为了进行预测,输入数据必须与训练数据以相同的方式准备,包括长度和转换。

  16. Matteo 2018年8月9日 晚上10:07 #

    您好。
    我有一个问题。
    我有一个带有标签的训练集,假设我下棋,并且有带有获胜者标签的历史比赛(0 = 玩家 1,1 = 玩家 2)。
    我想预测在 10/15 步之后,我获胜或失败的概率会更高。
    我该如何编写模型来预测一个介于 0 和 1 之间的数字(接近 0 表示我会赢,接近 1 表示我会输)?
    谢谢!

    • Jason Brownlee 2018年8月10日 上午6:14 #

      一个好的方法可能是使用评分系统来估计每个玩家的技能,并将其输入到预测模型中。

  17. Noe 2018年8月24日 晚上7:35 #

    你好 Jason,非常感谢这个出色的教程。

    我的顾虑是关于使用训练和测试过的模型来预测未来。这意味着测试集之后的值。

    谢谢你。

  18. Alireza 2018年9月27日 晚上10:06 #

    嗨,Jason,
    我尝试只为一行输入数据进行预测。但我想知道我的新数据是否需要缩放?如果需要,我尝试使用我的缩放模型,但对于每个特征都得到了“0”!!哪种方式是正确的?请帮帮我。

    谢谢你。

    • Jason Brownlee 2018年9月28日 上午6:15 #

      你的输入数据必须以与训练数据相同的方式准备。

      如果训练数据已缩放,则新数据必须使用相同的系数进行缩放。

  19. bedorlan 2018年10月11日 上午1:48 #

    终于有一个易于理解的关于如何实现 LSTM 的要点了。谢谢!

  20. Saurabh Swaroop 2018年10月11日 上午10:59 #

    你好 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 Brownlee 2018年10月11日 下午4:13 #

      这表明你的数据形状与模型的期望不匹配。

      你可以改变数据的形状或改变模型的期望。

  21. Shooter 2018年11月1日 下午2:13 #

    你好 Jason,
    感谢您提供出色的教程。我只想知道如何计算 LSTM 的计算复杂度?

    提前感谢。

    • Jason Brownlee 2018年11月1日 下午2:34 #

      抱歉,我没有关于计算神经网络计算复杂度方面的资料。

  22. nandini 2019年1月10日 晚上10:07 #

    我想通过分类来预测句子的类别,但在这里我需要知道,在进行模型预测时,如果一个句子已经被提供给模型进行预测,即使是第一次,我也需要知道你已经预测过这个句子。

    请就此问题提出建议,这对聊天机器人应用很有用,如果一个问题在对话中已经被问过,用户再次问同一个问题,我需要知道你以前已经问过这个问题。

    • Jason Brownlee 2019年1月11日 上午7:46 #

      也许可以添加一个 if 语句,在将句子传递给模型进行预测之前,先在哈希表中查找该句子。

      听起来像是工程问题,而不是机器学习问题。

      • nandini 2019年1月11日 下午6:18 #

        感谢您的回答

  23. Tom 2019年1月20日 下午12:58 #

    X=[x =21, x1=13, ‘grassMinTemp’=15]

    yhat = model.predict(X, verbose=0)
    print(yhat)

    我应该这样做吗?

    • Jason Brownlee 2019年1月21日 上午5:30 #

      不,输入是一个数字数组,就像训练数据一样,例如 X = [21, 13, 15]

  24. Jessie 2019年1月20日 下午1:20 #

    如果 LSTM 模型中有多个因变量,我该怎么办?

    X = [x1=12,x2=1234]
    model =the path of the model
    yhat = model.predict(X)
    谢谢

  25. Jeeva T 2019年2月25日 下午3:04 #

    你的模型出现了这样的错误,我该如何解决?

    使用 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

    了解一些常见原因和解决方案。寻求帮助时请包含整个堆栈跟踪
    此错误消息上方。

    • Jason Brownlee 2019年2月26日 上午6:13 #

      听到这个消息我很难过,也许 tensorflow 没有正确安装?

      也许可以尝试重新安装?
      也许可以尝试 theano?

  26. sai 2019年3月14日 晚上11:39 #

    我没有找到关于此模型中预测的清晰信息。我的疑问是,如何在没有测试数据的情况下预测未来值。假设我们有一个单一变量数据集(2012 年 1 月 - 2015 年 12 月),我们如何获得 2016 年 1 月至 2016 年 12 月的值?请帮助我。预先感谢。

    • Jason Brownlee 2019年3月15日 上午5:34 #

      yhat = model.predict(X)

      • lala smith 2019年4月29日 晚上7:16 #

        X 会是什么?

        • Jason Brownlee 2019年4月30日 上午6:50 #

          它将是你的模型期望的输入,例如,一个样本数组。

          • harish 2021年2月9日 下午6:51 #

            你好,杰森,
            与上述问题相同,我仍然有一个问题,即预测时我需要为输入 x 提供什么值。这里你提到了“将是你的模型期望的输入,例如,一个样本数组”,
            我输入了训练数据,其长度为 2708,它给出了相同的预测值长度为 2798。这里我想要确认,预测值是什么??
            我该如何假设它??

          • Jason Brownlee 2021年2月10日 上午8:02 #

            提供给模型的输入取决于你如何准备数据和定义模型。

            如果你训练的模型是接受 7 天的输入来预测一天,那么你需要提供过去 7 天的数据来获得下一天的输出。

  27. SAEED 2019年4月10日 下午5:07 #

    你好 Jason,
    假设时间序列是 1,2,3,4,5,6,7,8……。
    如果我们想使用 LSTM 预测时间序列中的下一个数据点(例如第 9、10、11 个……)。
    该怎么做?
    model.predict(X) X 是什么?

    • Jason Brownlee 2019年4月11日 上午6:32 #

      这取决于你如何构建你的问题。

      如果模型需要 3 个输入来预测 1 个输出,而这 3 个输入是前 3 个观测值,那么

      这有帮助吗?

      • Al 2019年10月2日 晚上10:04 #

        嗨 Jason,抱歉不请自来。我处于相同的位置,对我来说,模型确实有效,只要 X 中有数据,而没有预测未来。在你上面的例子中,对 X = asarray([[[6],[7],[8]]]) 的预测将绘制一条跟随这些值的曲线,而不是跟随值的预测。我寻找的 model.predict(X) 是对尚不存在并且没有真实数据绘图值的预测。如果今天是 10 月 2 日,我想预测未来 7 天的股票开盘价(那时还没有实际值),这该如何实现?用完整数据集的最后 x 步填充 X 只会返回对最后 x 步的良好预测,而这些我已经知道了……谢谢!

  28. ask 2019年4月21日 上午6:05 #

    嗨 Jason,
    例如,如果我想预测货币的价值,那么我的序列将是日期吗?

  29. mbelahcen 2019年4月25日 下午7:53 #

    你好,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)

    但是,我能否将它们保存为“一个”模型以供将来使用?

  30. lala smith 2019年4月29日 下午7:14 #

    嗨 Jason,我需要问一下如何从模型中预测接下来的1000个数据?

    • lala smith 2019年4月29日 下午7:19 #

      我的意思是,如果我保存了一个具有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个数据?
      谢谢你

      • Jason Brownlee 2019年4月30日 上午6:52 #

        抱歉,我没跟上。

        也许你可以详细说明一下?

    • Jason Brownlee 2019年4月30日 上午6:50 #

      你可以开发一个模型一次预测1000个步长,或者使用递归策略。

      我在此列出了一些方法
      https://machinelearning.org.cn/faq/single-faq/how-do-you-use-lstms-for-multi-step-time-series-forecasting

  31. mbelahcen 2019年5月24日 上午12:34 #

    你好 Jason,

    我开发的模型在测试集上的表现非常好。但预测时的性能却下降了。这是过拟合问题吗?您能否告诉我如何解决这个问题?

  32. Zach 2019年6月20日 下午11:47 #

    嗨,Jason,

    我正尝试使用我的LSTM进行未来预测,但我的训练数据包含未来X输入(例如,股票价格)无法获得的功能。有哪些方法可以解决这个问题,同时还能进行未来预测?

    谢谢。

    • Jason Brownlee 2019年6月21日 上午6:38 #

      用你拥有的数据来构建预测问题。例如,你打算如何使用模型应该决定问题的构建方式。

  33. Lopa 2019年6月27日 上午12:14 #

    嗨,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。如果您能提供帮助,将不胜感激。

  34. Lopa 2019年6月27日 上午12:25 #

    请忽略我之前的问题。

  35. Srijan Sah 2019年7月4日 下午4:15 #

    您能否帮助我使用本文训练的LSTM模型预测未来的销量?这将非常有帮助。

    https://towardsdatascience.com/predicting-sales-611cb5a252de

    在这篇文章中,预测是基于数据集中的时间段完成的,并且所有特征都可用,但我想为未来的日期进行预测。

    期待您的回复。

  36. guddu 2019年8月19日 下午5:55 #

    嗨,Jason,

    如果我的训练数据中有3个文件,测试数据中有1个文件。
    并且文件中存在监督数据,其中包含时间 t 和 t-1 时间戳的粘度和温度。我能否预测测试集在某个时间点的温度和对数粘度?

    我的数据是按时间生成的,我需要在某个时间点预测此时的粘度和温度。我可以通过将数据分为75%训练和25%测试来在一个文件中做到这一点。但是,如果我想要在3个这样的文件中训练我的模型,并在1个文件中进行测试呢?对于时间序列数据来说,这是否可行?

    • Jason Brownlee 2019年8月20日 上午6:23 #

      我认为是的,也许可以尝试一下看看什么可行?

  37. Rohith 2019年9月4日 下午7:21 #

    你好,
    我如何分割时间序列数据集来预测未来7天?

  38. Lopa 2019年10月7日 上午5:30 #

    嗨,Jason,

    LSTM模型在不同的运行中会产生不同的输出,除非你设置一个种子。在这种情况下,应该如何决定使用哪个模型(基本上是哪个权重)?

    • Jason Brownlee 2019年10月7日 上午8:32 #

      正确。

      使用模型在多次训练运行中的平均性能。

  39. Lopa 2019年10月7日 上午8:36 #

    好的,就像你在其中一篇教程中演示的那样。谢谢 Jason。

  40. vee9587 2019年10月9日 下午3:37 #

    嗨,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 出了什么问题,为什么我只得到一个输出?

  41. Gadelhag 2019年10月17日 上午1:28 #

    Jason 博士您好

    谢谢您的教程,它真的很有趣。我只是想知道,是否有可能让LSTM预测的输出不是一个清晰的值?换句话说,如果我需要预测5个不同的类别,我希望结果是归属度,例如,第一个类别的60%,第二个类别的20%,依此类推。

    提前感谢

  42. usama adam 2020年2月24日 下午8:49 #

    博士您好,抱歉,我是个新手

    您在哪里精确定义了 yhat?我的意思是,我有模型,我想用一个句子进行预测
    我的模型是 seq2seq 模型

    • Jason Brownlee 2020年2月25日 上午7:45 #

      yhat 是调用 predict() 时模型的输出。

      输出就是你训练模型所期望得到的结果。

  43. usama adam 2020年3月4日 上午12:01 #

    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))

    • Jason Brownlee 2020年3月4日 上午5:56 #

      我没有看到错误。或许可以尝试在 stackoverflow 上发布你的代码。

  44. Laiba 2020年3月26日 下午9:21 #

    嗨,Jason,
    我很欣赏你的工作。非常有帮助。我已经训练并测试了一个 CNN-LSTM 模型,但我在使用保存的 .h5 模型文件通过网络摄像头进行实时预测时遇到了问题。如果您能就此提供指导,将不胜感激。
    此致

  45. Abdel 2020年4月10日 下午6:53 #

    嘿 Jason,你的教程非常棒!!
    我有一个简单的问题,你是否有关于预测时间序列问题中的未来数据(我的意思是生成数据集中没有的新日期)的例子?
    再次感谢您所有的解释!!

    • Jason Brownlee 2020年4月11日 上午6:13 #

      上面的教程正是探讨了这一点。

      • Michael Nguyen 2020年4月15日 下午9:52 #

        嗨,Jason,

        1、你上面的例子使用了 time_steps = 1。现在,我有一个新的数据点(例如
        0.5),我需要将其重塑为 [1,1,1] 并进行预测。这样对吗?

        2、还有一问:上面例子中,你没有转换任何数据。我的意思是,对于一些训练
        数据,比如股票价格,我们需要使用 Minmax(范围0到1)或 Standard 来缩放数据。现在
        我们有了当前价格(例如 118.12,不在(0,1)范围内)。我们如何预测明天的价格?

        谢谢!

        • Jason Brownlee 2020年4月16日 上午6:00 #

          不,输入形状应与模型的预期相匹配。

          是的,在建模之前对数据进行缩放可能是一个好主意,并且应用于训练数据集的任何缩放都应该应用于新数据。

          • Michael Nguyen 2020年4月16日 上午11:59 #

            是的,但是时间步长为1表示我们预测的是下一天,样本形状为[1,1,1]。那么,只有一个点的情况下如何缩放数据?

          • Jason Brownlee 2020年4月16日 下午1:23 #

            抱歉,我不明白。也许你可以重新表述你的问题?

          • Michael Nguyen 2020年4月23日 下午8:48 #

            抱歉 Jason,

            我的意思是,如果模型需要3个输入来预测1个输出,那么
            1. 这是不可能的吗?
            2. 例如 X_train = [ [6], [7], [8] ],我们希望结果为 Predict Y_train = [ [7], [8], [9] ],但在数据处理阶段,我们对数据进行缩放 X_train = scaler.tranform(X_train)。现在,我们有了新数据 a = [9],如何进行预测?

            谢谢!

          • Jason Brownlee 2020年4月24日 上午5:41 #

            如果模型需要3个输入,那么在训练和推理过程中,你必须提供3个输入。

          • Michael Nguyen 2020年4月24日 下午12:30 #

            不,我的意思是 X_train 的形状是 [n,1,1]。我用 standard transform 对 X_train 进行缩放,并希望以 [n,1,1] 的形状进行预测。现在有了新数据 [1,1,1],如何进行预测?

          • Jason Brownlee 2020年4月24日 下午1:22 #

            直接调用即可,例如:

  46. jay 2020年4月17日 下午3:03 #

    请告诉我如何使用模型来预测未来的日期。

  47. Daniel S. 2020年4月17日 下午7:58 #

    嗨,Jason,

    非常棒的教程和解释。
    我正在使用多变量 LSTM 方法,包含多个 LSTM 层,以及用于时间序列数据的自注意力机制。我有60个时间戳,12个变量,以及大约30k个样本。我使用这些数据来预测时间戳65的涨幅。涨幅定义为时间戳60的收盘价与时间戳65的收盘价之间的百分比差。这被定义为目标变量。在这种情况下,LSTM并没有真正用于预测未来,而是用于预测一个特定的目标变量。因此,我认为我没有充分发挥LSTM的潜力。
    假设我想让模型知道这12个变量中的11个变量会影响收盘价,然后使用LSTM预测时间戳65的收盘价。我该如何实现?简而言之,如何告诉模型11个特定变量会影响收盘价,并基于此,时间戳65的收盘价预测是多少?

    提前感谢,

    Daniel

  48. Rajrudra 2020年4月22日 上午1:52 #

  49. Onur 2020年5月3日 下午10:39 #

    嗨,Jason,

    感谢您精彩的帖子。当真实结果对序列未知时,我该如何看到未来?我找不到关于这个问题的任何东西。

    例如;我的数据集在2018-2019年之间,但我希望看到2020年的预测。

  50. Mezgebe abebe 2020年5月25日 下午2:10 #

    感谢您的帖子,但如何使用 GUI 训练模型?

  51. Ani 2020年5月27日 下午1:10 #

    您好,我有一个数据集。
    在时间0 - 3行4列
    在时间1 - 3行4列
    我想预测
    在时间2
    最后一个元素、最后一列的值。

  52. Johnny Liu 2020年6月19日 下午12:13 #

    嗨,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(输出)。

    感谢您的时间!

    • Jason Brownlee 2020年6月19日 下午1:14 #

      第一行必须移除,因为没有先前的观测值。

      • Johnny Liu 2020年6月19日 下午1:26 #

        感谢您的回复。
        我的问题可能不够清楚。

        我对于如何使用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。

        • Jason Brownlee 2020年6月20日 上午6:04 #

          你可以手动一次处理一个样本。例如,先预测,然后构建下一个样本,然后预测。这被称为递归模型。

          • Johnny Liu 2020年6月20日 下午2:37 #

            感谢您的回复!

            如果我使用递归模型,在保存模型之前,我是否可以保持与训练和测试相同的方法?

            我是否应该使用另一种方法来训练和测试模型?

            我正在使用与此帖子相同的代码来训练和测试我的模型: https://machinelearning.org.cn/multivariate-time-series-forecasting-lstms-keras/#comment-540267

            你可以假设我正在使用上述链接中的相同代码,通过保存和加载此帖子中的方法来进行预测。

          • Jason Brownlee 2020年6月21日 上午6:18 #

            我建议以与您打算使用的方式相同的方式来评估模型。

          • Johnny Liu 2020年6月23日 下午6:21 #

            Hi Jason,感谢您的建议

            我尝试用 LSTM 模型进行预测,并将先前预测的输出反馈给当前输入。

            然而,我无法反转预测的缩放,因为我只有输出的初始值(8*10^6)。我用它来预测下一个输出,并用下一个输出来预测更远的输出。还有其他已知的输入数据,如温度和湿度。

            我们将输出称为“刚度”。stiffness(t) 是输出,stiffness(t-1) 是预测stiffness(t)的输入之一。

            刚度的初始值在0到1的缩放中被缩放到0,因为一开始在10000个样本中只存在第一个样本。

            结果是,在预测和反向缩放之后,它总是给我一个8*10^6的水平线。

            在这种情况下,我如何将0到1之间的缩放恢复到原始缩放?

          • Jason Brownlee 2020年6月24日上午6:25 #

            一个想法是手动运行转换以了解正在发生什么,并确保您在两次都以相同的形式应用它。

  53. Gopal Netrakanti 2020年8月9日凌晨3:46 #

    尊敬的Brownlee先生,

    感谢您这篇精彩的文章。我尝试遵循这里和其他地方提到的一些步骤,并构建了一个模型,但遇到了一些问题,这些问题我在下面的堆栈溢出问题中已经提到:

    https://stackoverflow.com/questions/63318474/training-output-drops-to-0-after-fixed-timesteps-
    and-again-retrains-in-lstm-mode

    如果您能看一下并帮助我,我将不胜感激。

    此致,
    Gopal。

  54. Konrad 2020年12月14日凌晨4:48 #

    Jason你好!很棒的教程。我有一个问题,如果我的训练数据是这种格式,我该如何尝试重用KERAS?

    [
    [2, 5, 6, 15, 22],
    [12, 8, 2, 33, 44],

    ]

    通常是5个数字,每个数字在1-49之间。

  55. harish 2021年2月9日下午6:38 #

    我如何使用lstm预测未来20天,你能简要解释一下吗?

  56. farzaneh 2021年2月11日上午6:26 #

    我有一个问题。
    LSTM将使用训练和测试数据进行训练,我如何修改代码来预测未来10个时间步的值?

  57. Deepak Verma 2021年3月10日下午4:37 #

    嗨,

    我终于完成了我的两层LSTM模型用于回归问题,但现在当我预测新输入时,模型为许多输入提供了相同的输出值。如何纠正?

    另一个疑问是,对于相同的输入,模型在不同时间给出不同的输出。

    • Jason Brownlee 2021年3月11日上午5:09 #

      抱歉,我不明白你的模型可能存在什么问题,也许你可以详细说明一下你的问题?

      是的,LSTM有内部状态,并且可以根据内部状态给出不同的输出。你必须注意在序列结束时或在适当的时候管理/重置状态。

  58. Milan 2021年4月29日下午1:53 #

    你好,你能告诉我如何给出一个单一向量并从上述LSTM网络获得预测吗?

  59. Choco 2021年5月13日上午4:25 #

    尊敬的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 Brownlee 2021年5月13日上午6:07 #

      是的,你必须设计你的模型来接受在需要进行预测时可用的数据大小/形状。

  60. Choco 2021年5月13日上午7:21 #

    谢谢您的回复!

  61. Echo Echo 2022年7月17日下午6:44 #

    你好 Jason,

    对于seq2seq模型(https://machinelearning.org.cn/develop-encoder-decoder-model-sequence-sequence-prediction-keras/),在创建了推理模型之后,我注意到我们必须自己定义一个predict_sequence函数来进行预测。

    为什么我们不能使用Keras的内置函数,就像这里使用的predict_classes()一样?

    • James Carmichael 2022年7月18日上午8:29 #

      你好Echo……这是为了演示目的。我鼓励你也研究一下使用Tensorflow/Keras函数。

  62. Ron 2022年11月18日上午9:05 #

    嗨,Jason,

    感谢您发布这篇有趣的文章。

    我使用滑动窗口将我的序列转换为监督学习问题。我输入了过去5分钟的观察结果,我的模型预测下一分钟。在我需要使用新数据重新训练模型之前,我可以进行多少次预测?

  63. sobhan 2023年6月20日晚上9:55 #

    尊敬的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),依此类推。

Leave a Reply

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。