我的所有标签都是1×5个载体。但与minist标签不同,我的每个标签都有两个'1',例如[1,1,0,0,0],[1,0,1,0,0]等等。在这种情况下,精度函数必须与用于minist数据集的精度函数不同。因为我需要在预测中找到最大的两个数字以及相应的标签来评估准确性。我已经使用tf.nn.top_k(预测,2)来查找预测中最大的两个数字的索引。但是,有一个大问题:
[in] _, index1 = tf.nn.top_k([0.76, 0.57, 0.23, 0.13, 0.28], 2)
[out] index1 = [0 1]
[in] _, index2 = tf.nn.top_k([0.57, 0.72, 0.23, 0.13, 0.28], 2)
[out] index2 = [1 0]
但他们的标签相同[1,1,0,0,0],并且:
[in] _, index3 = tf.nn.top_k([1,1,0,0,0], 2)
[out] index3 = [0 1],
因此,这两个预测的准确性因tf.reduce_mean而异,tf.equal。
谁知道如何使index1和index2与相应的标签相同[0 1]?谢谢你的建议〜
import tensorflow as tf
import numpy as np
k = 2
output = tf.constant([[ 0.87450282, 0.03455123, 0.77848193, 0.41180336],
[ 0.98002859, 0.53901269, 0.0548908, 0.97077529],
[ 0.73347189, 0.65121936, 0.7990083, 0.47084036]])
label = [[1,0,1,0],[1,0,0,1],[1,0,1,0]]
_, y = tf.nn.top_k(output, k)
_, y_ = tf.nn.top_k(label, k)
accuracy = tf.setdiff1d(y, y_)
with tf.Session() as sess:
print(sess.run(accuracy))
ValueError: Shape must be rank 1 but is rank 2 for 'ListDiff' (op: 'ListDiff') with input shapes: [3,2], [3,2].