从张量流中的2dim张量收集值

时间:2018-01-16 11:30:09

标签: tensorflow

这里是张量流初学者...我试图在2 dim张量中得到某个元素的值,在我的情况下,从概率矩阵得分。

概率矩阵是(1000,81),其中batchsize 1000和类数81.ClassIDs是(1000,)并且包含每个样本的最高类别得分的索引。如何使用tf.gather?

从概率矩阵中获得相应的课程分数
class_ids = tf.cast(tf.argmax(probs, axis=1), tf.int32)  
class_scores = tf.gather_nd(probs,class_ids)

class_scores应该是一个形状的张量(1000,),包含每个样本的最高class_score。

现在我使用的解决方法如下:

class_score_count = []
for i in range(probs.shape[0]):
    prob = probs[i,:]
    class_score = prob[class_ids[i]]
    class_score_count.append(class_score)
class_scores = tf.stack(class_score_count, axis=0)

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用tf.gather_nd执行此操作:

<a href='https://google.com' onclick='javascript:popWhenClicked(this.href);'>Google.com</a><br />
<a href='https://bing.com' onclick='javascript:popWhenClicked(this.href);'>Bing.com</a><br />
<embed src='https://yahoo.com' width='700px' height='500px' />

您也可以使用tf.reduce_max,即使它实际上会再次计算最大值,但如果您的数据不是太大,也可能不会慢得多:

class_ids = tf.cast(tf.argmax(probs, axis=1), tf.int32)
# If shape is not dynamic you can use probs.shape[0].value instead of tf.shape(probs)[0]
row_ids = tf.range(tf.shape(probs)[0], dtype=tf.int32)
idx = tf.stack([row_ids, class_ids], axis=1)
class_scores = tf.gather_nd(probs, idx)

答案 1 :(得分:0)

  • 您需要运行张量class_ids才能获得值
  • 值将是一个颠簸的数组
  • 您可以通过循环正常访问numpy数组
  • 你必须做这样的事情: predictions = sess.run(tf.argmax(probs, 1), feed_dict={x: X_data})
  • predictions变量包含您需要的所有信息
  • tensorflow仅返回您明确运行的张量值