【问题标题】:What does keras model.predict output?keras model.predict 输出什么?
【发布时间】:2021-01-17 18:37:39
【问题描述】:

我已经构建了一个 LSTM 模型(见下文)并对其进行了训练。我的损失函数是二进制交叉熵,因为我正在做二进制分类。训练 y 数据是一组 0 和 1。

当我运行model.predict(x_test_scaled) 时,我得到一组值介于 0 和 1 之间的单个系列。我猜这是一个概率,但它是输出 = 0 还是输出 = 1 的概率?

model = Sequential()

model.add(LSTM(units=512, input_shape = (X_train.shape[1],X_train.shape[2]), return_sequences=True)) 
model.add(Dropout(0.3))

model.add(LSTM(units=512, return_sequences=False))
model.add(Dropout(0.3))
    

model.add(Dense(264),  activation = 'tanh')

model.add(Dense(1))

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 Stack Overflow 并不打算取代现有的教程和文档。关于 Keras 和建模的各种文档通常描述了如何解释输出。我们希望您已经阅读了足够多的内容,以便针对该知识提出具体问题。
  • 我已阅读此网站上的文档。 link 它实际上并没有涵盖如何解释输出。它确实说“为输入样本生成输出预测。”,但这并没有真正的帮助。
  • 这就是为什么我向您推荐了不止一份文件。您需要了解您训练的特定类别的模型会产生什么。
  • 我很高兴阅读文档,如果您知道此信息,我将不胜感激包含此信息的文档链接。
  • 你有发帖指南的链接吗?

标签: python tensorflow keras sequential


【解决方案1】:

我对 ANN 很生疏,但也许我可以帮忙。

Model.predict 将输入向量通过模型并返回每个数据点的输出张量。 由于模型中的最后一层是单个 Dense 神经元,因此任何数据点的输出都是单个值。而且由于您没有为最后一层指定激活,它将默认为线性激活。

因为您正在解决分类问题,您可能需要sigmoid 激活。如果记忆没有背叛我,我相信您可以通过将其解决为具有 2 个类别的多类别分类(本质上是具有 softmax 激活的 2 个输出神经元)来解决问题。本质上,线激活不适用于分类问题。

更多注意事项:了解您的模型

如果你想了解你得到的输出,你必须了解你训练模型来解决的任务。

对于每个数据点,您告诉模型the output for this is 1the output for this is 0。但它不是将输出视为输入的类,而是将其视为范围 [0,1] 中的值。它正在接受训练以发出此范围内的值。

看看训练y张量。假设0 的输出与第一类匹配,1 的输出与第二类匹配。

在这种情况下,你的模型对输入越确定,它的输出就会越远离 0.5。

因此,0.1 的值意味着您的模型可以确定它属于class 1(更接近输出值0)。 如果输出是0.9999,那么它认为输入属于class 2,确定性非常高(输出非常接近1)。 另一方面,如果输出类似于0.45(非常接近0.5),那么模型会认为“可能输入属于第1 类,但我完全不确定。

希望这会有所帮助,我也会投票赞成任何更准确的答案。

【讨论】:

    【解决方案2】:

    它最有可能输出你的 AI 的准确度,你的 AI 的准确度越高越好,你可以使用它在你的训练过程中调整一些设置以获得更高的准确度。

    如果我错了,请纠正我!

    【讨论】:

    • model.evaluate 输出准确率和损失。 model.predict 用于预测您的测试集或验证,无论您想预测什么。然而,准确度并不是一个很好的指标。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2018-10-11
    相关资源
    最近更新 更多