Tensorflow 解释张量流输出

Tensorflow 解释张量流输出,tensorflow,Tensorflow,我有一个基于和训练工作的小型tensorflow网络,精度测试为~0.85。现在还可以。我将网络状态保存到检查点。现在我正在尝试测试网络,但我不知道如何解释输出。 如果为了训练,我使用了8输出神经元,并且test\u neural\u network的输出是3我如何知道3对应的是什么。我猜是第三个输出神经元,但我怎么知道输出神经元的顺序和第三个输出神经元是什么 def test_neural_network(): prediction = neural_network_model(p_i

我有一个基于和训练工作的小型tensorflow网络,精度测试为~0.85。现在还可以。我将网络状态保存到检查点。现在我正在尝试测试网络,但我不知道如何解释输出。 如果为了训练,我使用了
8
输出神经元,并且
test\u neural\u network
的输出是
3
我如何知道3对应的是什么。我猜是第三个输出神经元,但我怎么知道输出神经元的顺序和第三个输出神经元是什么

def test_neural_network():
    prediction = neural_network_model(p_inputdata)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        if path.isfile(temp_dir + "\\" + checkpointlabel + ".ckpt.index"):
            saver.restore(sess, temp_dir + "\\" + checkpointlabel + ".ckpt")

        with open(test_data_file, "r") as file:
            for line in file:
                testdata = np.array(re.split(csvseperatorRE, line.rstrip("\n"))[:-1])
                label    = re.split(csvseperatorRE, line.rstrip("\n"))[-1:][0]
                result = sess.run(tf.argmax(prediction.eval(feed_dict={p_inputdata: [testdata]}),1))
编辑
以下是培训信息和结果
培训标签:

Sebastiaan      [1 0 0 0 0 0 0 0]
Rob             [0 1 0 0 0 0 0 0]
Christina       [0 0 1 0 0 0 0 0]
Halleh          [0 0 0 1 0 0 0 0]
Vincent         [0 0 0 0 1 0 0 0]
MisterX         [0 0 0 0 0 1 0 0]
Frank           [0 0 0 0 0 0 1 0]
GerritJan       [0 0 0 0 0 0 0 1]
神经网络功能测试结果: O和X的正确性取决于培训标签的顺序。我不知道这是否正确

O = Correct
X = Not correct
[0-7] = result of test_neural_network
Name = expected result

X   [3] Christina
X   [3] Christina
O   [2] Christina
X   [3] Frank
X   [5] Frank
X   [3] Frank
X   [0] Frank
X   [2] Frank
X   [0] Frank
X   [3] GerritJan
X   [5] GerritJan
X   [1] GerritJan
O   [3] Halleh
O   [3] Halleh
O   [3] Halleh
X   [3] MisterX
X   [3] MisterX
X   [3] MisterX
X   [3] Rob
X   [3] Rob
X   [5] Rob
X   [5] Sebastiaan
X   [5] Sebastiaan
X   [5] Sebastiaan
X   [3] Vincent
X   [5] Vincent
X   [3] Vincent

正如您所指出的,您的模型有八个输出。每个输出的意义取决于您!或者,更具体地说,取决于您的数据。该示例似乎是一个相当标准的前馈模型,使用ReLU激活和softmax交叉熵作为损失函数(这是多类分类问题的典型选择,如您正在介绍的问题)。正如您所指出的,每个培训示例都标有一个1和0的向量,每个代表一个人,对吗?因此,网络将尝试学习正确的参数,例如,当您给出属于“Sebastiaan”的示例时,第一个输出为“大”,其余输出为“小”;什么是“大”和“小”取决于很多事情,但基本上你会希望在第一个位置上拥有最大的价值。其他名字也一样

如果您查看如何计算
神经网络测试中的
结果

result = sess.run(tf.argmax(prediction.eval(feed_dict={p_inputdata: [testdata]}),1))
您使用的是
tf.argmax
,意思是“此向量中最大值的索引是什么”(其中“此向量”是神经网络的输出);因此,您得到的是网络“认为”应该是与您给定的输入相关联的名称,表示为一个数字(索引是以零为基础的,所以我猜您是在打印之前向结果添加一个)


因此,最终,输出的意义和顺序取决于标签的意义和顺序。

我将正确/不正确更改为零基thx,以供建议:)在训练过程中,我使用在
测试神经网络中使用的相同数据检查我的准确度,但准确度约为85%。当您查看测试神经网络功能的结果时,它大约是14.8,这是怎么可能的?输出
2
是否应与
[0 0 0 1 0 0 0 0 0 0 0 0 0]
对应,因为它是列表的第二个索引?@GertKommer是的,
2
将与第二个位置有
1
的向量对应(这被称为一个热编码,TensorFlow在中实现了它)。至于准确性,有两个想法:1)也许你在比较基于0的索引和基于1的索引?2) 85 + 14.8 ≈ 100,所以这两个数字中的一个可能不是准确度,而是误差(一减去准确度)?我想我理解你的一个热门解释。我还发现了
test\u neural\u network
的准确度为何如此之低。在创建输出权重和偏差变量之前,我调用了
tf.train.Saver()
函数,因此它们不会保存在检查点中。。。