您好!有没有办法在不使用eval的情况下将Tensor修改为自己的排名版本?
例如,[6,4,5] - > [3,1,2]?
我有兴趣使用秩相关作为成本函数,我的bandaid解决方案一直使用session.run(tensor)来获取numpy值,然后修改它以进行排名相关。
到目前为止,问题一直是权重和偏差在训练期间没有变化,这使我认为TensorFlow没有计算出有意义的梯度。
我在(500和3e-8)之间的多个值之间改变了我的学习率,看看是否是问题。没有运气,重量和偏见保持不变。
答案 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)