【问题标题】:Need help using Keras' model.predict需要帮助使用 Keras 的 model.predict
【发布时间】:2018-10-23 11:56:00
【问题描述】:

我的目标是通过提供某个 Graph 的 2 个顶点,如果有链接则为 1,如果没有链接,则为 0。

我拟合了我的模型,它的损失约为 0.40,拟合期间的准确度约为 83%。然后,我通过提供一批所有正样本和几批负样本(使用 random.sample)来评估模型。我的模型对于正样本的准确度损失约为 0.35 和 1.0,对于负样本的准确度损失约为 0.46 和 0.68。

我对神经网络的理解虽然极其有限,但根据我的理解,上面的意思是理论上它在没有链接的情况下输出0时总是正确的,但有时即使没有链接也可以输出1。

现在我的实际问题是:我尝试通过 model.predict 用我的神经网络“重建”原始图。问题是我不明白预测输出的含义。起初我假设高于 0.5 的值表示 1,否则为 0。但如果是这种情况,模型甚至无法接近重建原始模型。

我知道它并不完美,但它只是为随机链接候选者返回高于 0.5 的值。

有人可以向我解释一下 model.predict 的工作原理以及如何正确使用它来重建我的图表吗?

【问题讨论】:

    标签: python tensorflow machine-learning keras predict


    【解决方案1】:

    您训练的模型并未直接优化 w.r.t。图重建。不失一般性,对于N-node 图,您需要预测N choose 2 链接。并且可以合理地假设大多数这些链接的真实值为 0。

    在查看 0 类和 1 类的模型准确度时,很明显,假设您的训练数据是平衡的,您的模型很容易预测 1 类。因此,您重建的图表包含许多 误报 链接。这就是重建图性能不佳的确切原因。

    如果可以重新训练模型,我建议你这样做并使用更多的负样本。

    如果没有,您需要考虑应用一些后处理。例如,不是找到一个阈值来决定哪两个节点有一个链接,而是使用原始预测的链接概率来形成一个节点到节点的链接矩阵,并应用最小生成树之类的东西来进一步决定什么是合适的链接。

    【讨论】:

    • 非常感谢您的回答!我不知道我是否理解正确,但你的意思是我应该重建我的模型以具有 2 个输出 - isLinked 和 isNotLinked,所以我的预测输出它是对两者的预测,我使用较高的一个进行重建?
    • 没有。我并不是说您需要重建模型才能拥有两个输出节点。我的意思是您的课程linkno-link 在大多数图表中自然是不平衡的,因此您可以考虑在您的训练数据中反映这一事实。
    • 我做到了。我的意思是,在我的测试图中,我有 40 个顶点,链接总数为 50。在完整图中,将有 40*39=1560 个链接。当我为每个顶点随机选择 30 个负样本并且为正样本选择所有链接一次时,网络完全偏向于负值。然后我试图平衡这一点,并用 (40*30)/50 = 24 倍的正样本常规数量训练我的模型。在此之后,两者的评估都相当平衡,但我的重建仍然提供了绝对随机的输出。在找到合适的比例之前,是否只是反复试验?
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2015-05-20
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多