首先说明一下,我对神经网络非常新手,这是我第一次使用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形状的数组,但我们想要的不是类别概率,而是图像中哪个数字
- 因此,我们取这个预测数组中最大概率的索引
- 这个索引将对应网络预测的数字
希望我解释得清楚,哈哈