如何同时在多个维度上执行reduce_op操作?

3
假设我有一个由N个张量组成的列表,表示为一个N+1阶张量。例如,一个由100个10x20矩阵组成的列表可以表示为一个形状为(100,10,20)的3阶张量。我需要对这些矩阵执行相同的操作:对每个矩阵进行所有元素的求和、第i个矩阵值的平均值和中位数等操作。
是否可以像tf.math.reduce_sumtf.math.reduce_meantf.contrib.distributions.percentile这样沿着轴0计算整个矩阵,但对沿着0轴的每个元素都进行计算?
例如:
matricesList = tf.constant([[[1,1],[1,1]],
                           [[2,2],[2,2]]])

op = sum_matrices_along_axis(matrixList)

预计op = [4,8]

最初的回答

1个回答

3

您可以将多个维度传递给减少操作的axis参数:

最初的回答:

import tensorflow as tf

matricesList = tf.constant([[[1, 1], [1, 1]],
                            [[2, 2], [2, 2]]])
matricesSum = tf.reduce_sum(matricesList, axis=[1, 2])
with tf.Session() as sess:
    print(sess.run(matricesSum))
    # [4 8]

即使您事先不知道维度的数量,仍然可以减少“除第一个外的所有”维度:

最初的回答

import tensorflow as tf

# The number of dimensions of tensorsList is unspecified
tensorsList = tf.placeholder(tf.int32)
# Dimensions from one to the last one
reduceDims = tf.range(1, tf.rank(tensorsList))
tensorsSum = tf.reduce_sum(tensorsList, axis=reduceDims)
with tf.Session() as sess:
    matrices = [[[1, 1], [1, 1]],
                [[2, 2], [2, 2]]]
    print(sess.run(tensorsSum, feed_dict={tensorsList: matrices}))
    # [4 8]

非常感谢,我不知道可以传递多个轴,但最重要的是我完全忽略了可以将N+1秩张量的元素简单地展平到一个数组中,并在展平后的张量矩阵上执行所有操作,因为它们的维度对我来说并不重要。 - LolAsdOmgWtfAfk
@LolAsdOmgWtfAfk 是的,你也可以这样做:tf.reduce_sum(tf.reshape(tensorsList, [tf.shape(tensorsList)[0], -1]), axis=1) - jdehesa
抱歉,N阶张量*。我会尝试最快的选项,谢谢 :) - LolAsdOmgWtfAfk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接