我如何获得针对单个图像预测的神经网络的价值?

时间:2019-04-04 11:19:28

标签: python tensorflow neural-network mnist

我正在尝试创建一个简单的python脚本,该脚本将允许您输入手写数字的图片,而NN模型将尝试猜测到目前为止是什么数字,我也已经成功制作了该模型经过测试,但是在测试单个图像时,我得到的输出是这样的。

https://i.imgur.com/0GNMUPR.png

def make_pred():
    Tk().withdraw()
    filename = askopenfilename()
    #the array that will hold the values of image
    image = np.zeros(784)
    #read image
    gray = cv2.imread(filename, cv2.IMREAD_GRAYSCALE )
    #resize image and set background to black
    gray = cv2.resize(255-gray, (28,28))
    #making the image a one dimensional array of 784
    flatten = gray.flatten() / 255.0
    cv2.imshow("heh",gray)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #saving the image and the correct value
    image = flatten
    prediction = neural_network_model(x)
    n_save = tf.train.Saver()
    with tf.Session() as sess2:        
        n_save.restore(sess2, './nn_test/nnmodel')
        print(sess2.run(prediction,feed_dict={x: [image], y:[7]}))

y的值为7,因为这是我尝试使用的数字。

那么我如何获得NN认为该字符的值呢?

1 个答案:

答案 0 :(得分:0)

从您提供的信息中很难分辨出来。但是,我认为您获得的输出很有可能只是softmax输出层之前的logits。

将此输出馈入softmax图层,然后在输出上获得概率分布。在您的情况下,softmax输出为:

[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]

现在,您只需要获取此张量的argmax即可。在您的示例中,网络的预测为5。

您错误地将logit作为网络输出的一个可能原因是,大多数框架将softmax输出与loss函数结合在一起。因此,虽然损失函数确实将logits作为输入,但网络的实际输出仅在logmax上应用了softmax输出层之后给出。