tf.nn.top_k()
- 2019 年 10 月 28 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36670529/article/details/102711031
一、函数原型
tf.nn.top_k( input, k=1, sorted=True, name=None )
为了找到输入的张量的最后的一个维度的最大的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)) print(sess.run(b)) Output: [[0.73731748 0.13455566 0.20236765 0.92909052] [0.7923021 0.46949081 0.31521194 0.2999236 ] [0.19102823 0.01301476 0.70615716 0.68501807]] TopKV2(values=array([[0.92909052, 0.73731748], [0.7923021 , 0.46949081], [0.70615716, 0.68501807]]), indices=array([[3, 0], [0, 1], [2, 3]], dtype=int32))