tf.nn.in_top_k和tf.nn.top_k()的用法

tf.nn.in_top_k 

解释:这个函数的作用是返回一个布尔向量,说明目标值是否存在于预测值之中。

'''
    predictions: 你的预测结果(一般也就是你的网络输出值)大小是预测样本的数量乘以输出的维度
    target:      实际样本类别的标签,大小是样本数量的个数
    k:           每个样本中前K个最大的数里面(序号)是否包含对应target中的值
    
'''
import tensorflow as tf
A = tf.Variable([[0.8, 0.4, 0.5, 0.6],[0.1, 0.9, 0.2, 0.4],[0.1, 0.9, 0.4, 0.2]])
B = tf.Variable([1, 1, 2])
result = tf.nn.in_top_k(A, B, 2)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(A))
    print(sess.run(B))
    print(sess.run(result))
#   k=1 [False True False]#   k=2 [False True True]
'''
    解释:
    k取1的时候:
         因为A中第一个元素的最大值为0.8,索引(序号)是0,而B是1,不包含B,所以返回False.
             A中第二个元素的最大值为0.9,索引(序号)是1,而B是1,包含B,所以返回True.
             A中第三个元素的最大值为0.9,索引(序号)是1,而B是2,不包含B,所以返回False.
    k取2的时候:
         因为A中前两个元素的最大值为0.8,0.6,索引(序号)是0,3,而B是1,不包含B,所以返回False.
             A中前两个元素的最大值为0.9,0.4,索引(序号)是1,3,而B是1,包含B,所以返回True.
             A中前两个元素的最大值为0.9,0.4,索引(序号)是1,2,而B是2,包含B,所以返回True.
'''

tf.nn.top_k()

tf.nn.top_k(
    input,
    k=1,
    sorted=True,
    name=None
)

解释:这个函数的作用是返回 input 中每行最大的 k 个数,并且返回它们所在位置的索引。

如果输入的是一个向量,也就是rank=1,找到最大的k个数在这个向量,则输出最大的k个数字和最大的这k个数字的下标。如果输入的张量是一个更高rank的矩阵,那么我们只要找到每一行的最大的k个数字,以及他们的下标。如果两个元素相同,那么低一点的下标先出现。

参数:

input:输入的tensor,不能是array这些啊!要么输入1-D,要是更高维度必须保证最后的一个维度长度必须大于等于K

k:0-D的int32的数字张量。

sorted:如果sorted=True,那么选出来的k个数字就需要按照降序的顺序排序

name:可选项,也就是这个操作的名字

返回:

values:也就是每一行的最大的k个数字

indices:这里的下标是在输入的张量的最后一个维度的下标

import tensorflow as tf
import numpy as np
 
#选出每一行的最大的前两个数字
#返回的是最大的k个数字,同时返回的是最大的k个数字在最后的一个维度的下标
a=tf.constant(np.random.rand(3,4))
b=tf.nn.top_k(a,k=2)
with tf.Session() as sess:
   print(sess.run(a))

结果:
[[0.41001266 0.88277785 0.57616844 0.46520008]
 [0.62866649 0.55638628 0.94319267 0.26693693]
 [0.05450942 0.32520777 0.09960993 0.66729146]]
TopKV2(values=array([[0.88277785, 0.57616844],
       [0.94319267, 0.62866649],
       [0.66729146, 0.32520777]]), indices=array([[1, 2],
       [2, 0],
       [3, 1]]))

import tensorflow as tf
import numpy as np
 

a=tf.constant(np.random.rand(3,4,3))
b=tf.nn.top_k(a,k=2)
with tf.Session() as sess:
   print(sess.run(a))
   print(sess.run(b))
结果:
TopKV2(values=array([[[0.51127848, 0.21136045],
        [0.90710233, 0.35295698],
        [0.74462195, 0.71343596],
        [0.98368278, 0.31890803]],

       [[0.9816314 , 0.97627116],
        [0.90231759, 0.19154434],
        [0.92794757, 0.18790949],
        [0.36879293, 0.15553872]],

       [[0.6699889 , 0.50476143],
        [0.46577973, 0.06038128],
        [0.85069354, 0.73808021],
        [0.63148579, 0.51741944]]]), indices=array([[[1, 0],
        [0, 1],
        [1, 0],
        [2, 0]],

       [[2, 0],
        [0, 2],
        [2, 1],
        [0, 1]],

       [[2, 0],
        [2, 1],
        [2, 0],
        [1, 2]]]))

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值