Как выполнить tf.nn.softmax в двух выбранных измерениях в тензорном потоке? - PullRequest
0 голосов
/ 16 марта 2019

Я хочу реализовать tf.nn.softmax() для выбранных двух измерений тензора с формой (batch_size=?, height, width, channel).

Но, похоже, tf.nn.softmax() не может получить 2 оси одновременно. Использование tf.softmax(tensor, axis=[1, 2]) повысит погрешность оси в тензорном потоке.

Как я могу реализовать это элегантно и в векторизованном режиме? спасибо: D

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Вместо прохождения двух измерений за раз, я сначала изменил бы ввод соответственно, например ::

array = tf.constant([[1., 2.], [3., 4.]])

tf.nn.softmax(array, axis=0) # Calculate for axis 0
tf.nn.softmax(array, axis=1) # Calculate for axis 1

tf.nn.softmax(tf.reshape(array, [-1])) # Calculate for both axes
0 голосов
/ 16 марта 2019

Вы можете сделать

array = np.random.rand(1, 2, 2, 1)
s1 = tf.nn.softmax(array, axis=1)
s2 = tf.nn.softmax(array, axis=2)
rs = tf.reduce_sum([s1, s2], 0)

Это вернет тензор той же формы, что и исходный массив

...