TensorFlow:沿轴的张量的最大值
deep-learning
python
tensor
tensorflow
5
0

我的问题分为两个部分:

  1. 如何计算沿张量的特定轴的最大值?例如,如果我有

     x = tf.constant([[1,220,55],[4,3,-1]]) 

    我想要类似的东西

     x_max = tf.max(x, axis=1) print sess.run(x_max) output: [220,4] 

    我知道有一个tf.argmaxtf.maximum ,但都没有给出沿单个张量轴的最大值。现在,我有一个解决方法:

     x_max = tf.slice(x, begin=[0,0], size=[-1,1]) for a in range(1,2): x_max = tf.maximum(x_max , tf.slice(x, begin=[0,a], size=[-1,1])) 

    但是它看起来并不理想。有一个更好的方法吗?

  2. 给定一个张量的argmax的索引,我如何使用这些索引索引到另一个张量?使用上面x的示例,我该如何执行以下操作:

     ind_max = tf.argmax(x, dimension=1) #output is [1,0] y = tf.constant([[1,2,3], [6,5,4]) y_ = y[:, ind_max] #y_ should be [2,6] 

    我知道切片,就像最后一行一样,在TensorFlow中还不存在( #206 )。

    我的问题是: 对于我的特定情况(最好使用其他方法,例如,收集,选择等),最好的解决方法什么?

    附加信息:我知道xy只会是二维张量!

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

tf.reduce_max()运算符正是提供了此功能。默认情况下,它计算给定张量的全局最大值,但是您可以指定一个reduction_indices列表,其含义与NumPy中的axis相同。要完成您的示例:

x = tf.constant([[1, 220, 55], [4, 3, -1]])
x_max = tf.reduce_max(x, reduction_indices=[1])
print sess.run(x_max)  # ==> "array([220,   4], dtype=int32)"

如果使用tf.argmax()计算argmax,则可以通过使用tf.reshape()y ,将argmax索引转换为矢量索引,然后使用tf.gather()来从不同张量y获取值。提取适当的值:

ind_max = tf.argmax(x, dimension=1)
y = tf.constant([[1, 2, 3], [6, 5, 4]])

flat_y = tf.reshape(y, [-1])  # Reshape to a vector.

# N.B. Handles 2-D case only.
flat_ind_max = ind_max + tf.cast(tf.range(tf.shape(y)[0]) * tf.shape(y)[1], tf.int64)

y_ = tf.gather(flat_y, flat_ind_max)

print sess.run(y_) # ==> "array([2, 6], dtype=int32)"
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号