这里是张量流初学者...我试图在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)
感谢您的帮助!
答案 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
才能获得值predictions = sess.run(tf.argmax(probs, 1), feed_dict={x: X_data})
predictions
变量包含您需要的所有信息