#tensorflow #softmax
#tensorflow #softmax
Вопрос:
Я хочу реализовать tf.nn.softmax()
для выбранных двух измерений тензор с формой (batch_size=?, height, width, channel)
.
Но tf.nn.softmax()
кажется невозможным получить 2 оси одновременно. Использование tf.softmax(tensor, axis=[1, 2])
вызовет ошибку оси в tensorflow.
Как я могу реализовать это элегантно и в векторном режиме? спасибо: D
Ответ №1:
Это можно сделать с помощью функций активации keras:
# logits has shape [BS, H, W, CH]
prob = tf.keras.activations.softmax(logits, axis=[1, 2])
# prob has shape [BS, H, W, CH]
check = tf.reduce_sum(prob, axis=[1, 2])
# check is tensor of ones with shape [BS, CH]
Ответ №2:
Вместо того, чтобы передавать два измерения одновременно, я бы сначала соответствующим образом изменил входные данные, например:
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
Ответ №3:
Вы можете сделать
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)
Это вернет тензор той же формы, что и исходный массив
Комментарии:
1. Да, но это не гарантирует, что сумма всех элементов в массиве равна 1, что является важным соображением, учитывая, что softmax часто используется для интерпретации выходных данных как вероятностей.