TensorFlow 排序,ranking

计算 ranking loss 时候可能需要对 tensor 进行排序和获取对应的index,
下面介绍利用 tf.nn.top_k 进行排序和获取序号

有一个 tensor,[9, 4, 5], 想得到它从小到大的排序的index [1, 2, 0]
tf.nn.top_k 可以进行从大到小排序,只要加个负号就可以进行从小到大排序了

import tensorflow as tf
a = tf.constant([3, 4, -1, 6])
size_a = tf.size(a)
max_index = tf.nn.top_k(a, size_a)[1]
min_index = tf.nn.top_k(-a, size_a)[1]

sess = tf.Session()
idx_max, idx_min = sess.run([index_max, index_min])
print(idx_max, idx_min)

显示的结果是
(array([3, 1, 0, 2], dtype=int32), array([2, 0, 1, 3], dtype=int32))

以下是 tf.nn.top_k 的API:
tf.nn.top_k(input, k=1, sorted=True, name=None)
Args:

  • predictions: A Tensor of type float32. A batch_size x classes tensor.
  • targets: A Tensor. Must be one of the following types: int32, int64. A batch_size vector of class ids.
  • k: An int. Number of top elements to look at for computing precision.
  • name: A name for the operation (optional).

另外,也可以利用 tf.reverse 对数组进行逆序

min_index = tf.reverse(max_index, axis=[0])

tf.reverse(tensor, axis, name=None)
Args:

  • tensor: A Tensor. Must be one of the following types: uint8, int8, int32, int64, bool, half, float32, float64, complex64, complex128. Up to 8-D.
  • axis: A Tensor. Must be one of the following types: int32, int64. 1-D. The indices of the dimensions to reverse.
  • name: A name for the operation (optional).
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值