我正在尝试创建一个简单的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认为该字符的值呢?
答案 0 :(得分:0)
从您提供的信息中很难分辨出来。但是,我认为您获得的输出很有可能只是softmax输出层之前的logits。
将此输出馈入softmax图层,然后在输出上获得概率分布。在您的情况下,softmax输出为:
[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]
现在,您只需要获取此张量的argmax即可。在您的示例中,网络的预测为5。
您错误地将logit作为网络输出的一个可能原因是,大多数框架将softmax输出与loss函数结合在一起。因此,虽然损失函数确实将logits作为输入,但网络的实际输出仅在logmax上应用了softmax输出层之后给出。