TensorFlow:如何对张量进行排名?

时间:2016-07-21 21:07:27

标签: tensorflow

问题

您好!有没有办法在不使用eval的情况下将Tensor修改为自己的排名版本?

例如,[6,4,5] - > [3,1,2]?

上下文

我有兴趣使用秩相关作为成本函数,我的bandaid解决方案一直使用session.run(tensor)来获取numpy值,然后修改它以进行排名相关。

到目前为止,问题一直是权重和偏差在训练期间没有变化,这使我认为TensorFlow没有计算出有意义的梯度。

我在(500和3e-8)之间的多个值之间改变了我的学习率,看看是否是问题。没有运气,重量和偏见保持不变。

1 个答案:

答案 0 :(得分:6)

您可以查看tf.nn.top_k的第二个输出以获取最大元素的位置。原始列表中元素的排名与此相反,因此在结果

上运行top_k

这给出了最大元素的位置,你实际上想要最小而不是最大,所以你需要否定top_k的输入

a = tf.constant([6, 4, 5])
size = tf.size(a)
indices_of_ranks = tf.nn.top_k(-a, k=size)[1]
ranks_of_indices = tf.nn.top_k(-indices_of_ranks, k=size)[1]
sess = tf.Session()
sess.run(ranks_of_indices+1)