Мой вопрос состоит из двух связанных частей:
-
Как рассчитать максимум вдоль некоторой оси тензора? Например, если у меня есть
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.argmax
и atf.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]))
Но он выглядит менее оптимальным. Есть ли лучший способ сделать это?
-
Учитывая индексы тензора a
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).
Мой вопрос: каково наилучшее обходное решение для моего конкретного случая (возможно, используя другие методы, такие как сбор, выбор и т.д.)?
Дополнительная информация: Я знаю, что
x
иy
будут только двухмерными тензорами!