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