Допустим, у меня есть список тензоров ранга N, выраженный как тензор ранга N+1. Например, список из 100 матриц 10x20 в виде тензора ранга 3 формы (100,10,20). Мне нужно выполнить одни и те же операции над каждой из этих матриц: суммировать все элементы, среднее и медиану значений i-й матрицы для каждой матрицы.
Можно ли сделать что-то вроде tf.math.reduce_sum, tf.math.reduce_mean, tf.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]






Вы можете передать несколько измерений в параметр операций сокращения 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]
@LolAsdOmgWtfAfk Да, верно, вы также можете сделать tf.reduce_sum(tf.reshape(tensorsList, [tf.shape(tensorsList)[0], -1]), axis=1).
Извините, тензор ранга N* Попробую самый быстрый вариант, спасибо :)
Большое спасибо, я не знал, что можно передать несколько осей, но, прежде всего, я полностью упустил из виду, что могу просто сгладить элементы рангового тензора N + 1 в массиве и вычислить все операции над матрицей сглаженные тензоры, так как я не возражаю против их размерности.