python - 为什么使用相同的 Keras 模型和输入进行预测时会得到不同的结果?
问题描述
在这里发帖是我最后的手段,因为我在网上找不到类似的东西。我训练了一个模型来将嵌入分类(一个简单的三层密集神经网络)。
现在我想使用经过训练的模型进行实时预测,但我发现如果我将整个测试数据帧输入到模型中,得到元素编号i
的预测,并将其与我通过输入得到的预测进行比较只是i
将测试数据框的元素号放入模型中,我得到了不同的结果。这是代码,以防我解释得不够好:
i = 522
y_pred = model.predict(X_test)
y_pred_2 = model.predict(X_test.iloc[[i]])
print (f'{np.argmax(y_pred[i])} {np.argmax(y_pred_2)}')
output: 8 5
就像我的模型在一次运行中处理整个测试集的行为与一次处理单行时的行为不同。我正在使用熊猫作为输入数据。
编辑:更多信息,分别是y_pred
和的输出形状,其中 10 是我拥有的类数。y_pred_2
(603, 10)
(1, 10)
两个预测的一些示例值,具有任意值i
:
y_pred[i]: array([1.3353945e-02, 2.8374636e-09, 1.4435661e-08, 3.4135045e-18,
7.7986561e-02, 3.7737598e-03, 2.0284578e-10, 2.7154891e-03,
9.0203673e-01, 1.3346069e-04], dtype=float32)
y_pred_2 = array([[1.1702824e-16, 1.6781385e-37, 2.5281618e-33, 0.0000000e+00,
2.3075200e-09, 1.0000000e+00, 9.9125501e-35, 6.2606384e-22,
5.8689110e-14, 2.3486194e-24]], dtype=float32)
解决方案
np.argmax
默认为行轴。您将获得跨行的最大预测,并且希望跨列。尝试:
print(f'{np.argmax(y_pred[i], axis=1)} {np.argmax(y_pred_2, axis=1)}')
推荐阅读
- python - 在首页上显示条目帖子和评论时遇到问题
- amazon-web-services - DynamoDB BatchWrite 在使用 lambda 或仅使用延迟时会提高吞吐量吗?
- javascript - 回调不起作用...(异步)javascript
- flutter - 如何使用颤振修剪存储在云 Firestore 中的这个值?
- pine-script - 如何将 28 以上的方向运动指数(adx)“+DI”添加到令人兴奋的长条件?
- android - 如何在 Wear 应用程序上添加点指示器
- github - 在 ubuntu 20.04 服务器上更新网站代码的最佳方法是什么?
- xilinx - xilinx SDK 中 ucos-iii 的 lwip 端口
- runtime-error - 结账时 Realex 全球支付问题
- c# - BufferBlock 缺失值