t
f
.
n
n
.
i
n
_
t
o
p
_
k
(
p
r
e
d
i
c
t
i
o
n
s
,
t
a
r
g
e
t
s
,
k
,
n
a
m
e
=
N
o
n
e
)
tf.nn.in\_top\_k(predictions, targets, k, name=None)
tf.nn.in_top_k(predictions,targets,k,name=None)
p
r
e
d
i
c
t
i
o
n
s
predictions
predictions:你的预测结果(一般也就是你的网络输出值)大小是预测样本的数量乘以输出的维度。
t
a
r
g
e
t
target
target:实际样本类别的标签,大小是样本数量的个数。
k
k
k:每个样本中前
K
K
K个最大的数里面(序号)是否包含对应
t
a
r
g
e
t
target
target中的值。
import tensorflow as tf
X=tf.Variable([[0.4,0.2,0.3,0.1],[0.1,0.1,0.2,0.6],[0.7,0.1,0.1,0.1]])
Y=tf.Variable([2,1,1])
k=tf.placeholder(tf.int32,shape=None)
result=tf.nn.in_top_k(X,Y,k)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print(sess.run(X))
print(sess.run(Y))
print(sess.run(result,feed_dict={k:1}))
print(sess.run(result,feed_dict={k:2}))
#结果为:
#[[0.4 0.2 0.3 0.1]
[0.1 0.1 0.2 0.6]
[0.7 0.1 0.1 0.1]]
#[2 1 1]
#[False False False]
#[ True False True]
分析一下结果
当
k
=
1
k=1
k=1时,
X
X
X中
[
0.40.20.30.1
]
[0.4 0.2 0.3 0.1]
[0.40.20.30.1]最大元素为
0.4
0.4
0.4,索引为
0
0
0,而
B
B
B是
2
2
2,不包含
B
B
B,故
F
a
l
s
e
False
False
[
0.10.10.20.6
]
[0.1 0.1 0.2 0.6]
[0.10.10.20.6]最大元素为
0.6
0.6
0.6,索引为
3
3
3,B是
1
1
1,不包含
B
B
B,故
F
a
l
s
e
False
False
[
0.70.10.10.1
]
[0.7 0.1 0.1 0.1]
[0.70.10.10.1]最大元素为
0.7
0.7
0.7,索引为
0
0
0,B是
1
1
1,不包含
B
B
B,故
F
a
l
s
e
False
False
当
k
=
2
k=2
k=2时,
X
X
X中
[
0.40.20.30.1
]
[0.4 0.2 0.3 0.1]
[0.40.20.30.1]最大的两个元素为
0.4
、
0.3
0.4、0.3
0.4、0.3,索引为
0
、
2
0、2
0、2,
B
B
B为
2
2
2,故
T
r
u
e
True
True,
[
0.10.10.20.6
]
[0.1 0.1 0.2 0.6]
[0.10.10.20.6]最大两个元素为
0.6
、
0.2
0.6、0.2
0.6、0.2,索引为
3
、
2
3、2
3、2,
B
B
B是
1
1
1,不包含
B
B
B,故
F
a
l
s
e
False
False
[
0.70.10.10.1
]
[0.7 0.1 0.1 0.1]
[0.70.10.10.1]最大元素为
0.7
,
0.1
0.7,0.1
0.7,0.1,索引为
0
、
1
0、1
0、1,
B
B
B是
1
1
1,包含
B
B
B,故
T
r
u
e
True
True