为什么我们使用numpy.argmax()从预测的numpy数组中返回索引?

首先说明一下,我对神经网络非常新手,这是我第一次使用numpy、tensorflow或keras。

我编写了一个神经网络来识别手写数字,使用的是MNIST数据集。我按照Sentdex的这个教程进行操作,注意到他使用print(np.argmax(predictions[0]))来打印numpy预测数组中的第一个索引。

我尝试运行程序,将该行替换为print(predictions[i])(i被设置为0),但输出不是一个数字,而是:[2.1975785e-08 1.8658861e-08 2.8842608e-06 5.7113186e-05 1.2067199e-10 7.2511304e-09 1.6282028e-12 9.9993789e-01 1.3356166e-08 2.0409643e-06]

让我感到困惑的代码是:

predictions = model.predict(x_test)for i in range(10):   plt.imshow(x_test[i])   plt.show()   print("PREDICTION: ", predictions[i])

我阅读了numpy关于argmax()函数的文档,据我所知,它接受一个x维数组,将其转换为一维数组,然后返回最大值的索引。Keras关于model.predict()的文档表明,该函数返回网络预测的numpy数组。所以我不明白为什么我们必须使用argmax()来正确打印预测,因为据我所知,它的用途完全不相关。

抱歉代码格式不好,我没能弄清楚如何正确插入多行代码块到我的帖子中


回答:

如果我理解你的问题,那么答案非常简单:

  • 你想预测图像中的数字,为此你使用了softmax激活层来预测每个类别的概率
  • 所以你的预测是一个NUMBER_OF_CLASS形状的数组,但我们想要的不是类别概率,而是图像中哪个数字
  • 因此,我们取这个预测数组中最大概率的索引
  • 这个索引将对应网络预测的数字

希望我解释得清楚,哈哈

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注