python - 需要帮助使用 Keras 的 model.predict
问题描述
我的目标是通过提供某个 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 的工作原理以及如何正确使用它来重建我的图表吗?
解决方案
您训练的模型并未直接针对图形重建进行优化。不失一般性,对于N
-node 图,您需要预测N choose 2
链接。并且可以合理地假设大多数这些链接的真实值为 0。
在查看 0 类和 1 类的模型准确性时,很明显,假设您的训练数据是平衡的,您的模型很容易预测 1 类。因此,您重建的图形包含许多误报链接。这就是重建图性能不佳的确切原因。
如果可以重新训练模型,我建议你这样做并使用更多的负样本。
如果没有,您需要考虑应用一些后处理。例如,不是找到一个阈值来决定哪两个节点有一个链接,而是使用原始预测的链接概率来形成一个节点到节点的链接矩阵,并应用最小生成树之类的东西来进一步确定什么是合适的链接。
推荐阅读
- java - 通过 Jackson 序列化 java.sql.Date,同时考虑夏令时
- python - 将函数嵌套到函数中
- mongodb - Mongoose 是否有办法在一个查询中查询文档并在不存在时创建新文档?
- ruby-on-rails - Rails ActiveStorage url_for 返回一个无效的 URL
- filter - Kentico:如何显示除一个之外的所有类别的博客文章?
- django - 名字、姓氏和图像未显示
- angular - Angular 中的纯管道
- javascript - JavaScript 更新并依赖于选择输入
- python - 如何单独浏览子文件夹?
- three.js - THREE.js:响应鼠标事件而变形的球体