Определите слой Lambda
и используйте функцию softmax
из бэкэнда с требуемой осью для вычисления softmax по этой оси:
from keras import backend as K
from keras.layers import Lambda
soft_out = Lambda(lambda x: K.softmax(x, axis=my_desired_axis))(input_tensor)
Обновление: Массив с размером N будет иметь форму (d1, d2, d3, ..., dn)
.Каждый из них называется осью.Таким образом, первая ось (т. Е. axis=0
) имеет размерность d1
, вторая ось (т. Е. axis=1
) имеет размерность d2
и т. Д.Кроме того, наиболее распространенным случаем массива является двумерный массив или матрица, которая имеет форму (m, n)
, то есть m
строк (т.е. axis=0
) и n
столбцов (то есть axis=1
).Теперь, когда мы указываем ось для выполнения операции, это означает, что операция должна быть вычислена по этой оси.Позвольте мне прояснить это на примерах:
>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a.shape
(3, 4) # three rows and four columns
>>> np.sum(a, axis=0) # compute the sum over the rows (i.e. for each column)
array([12, 15, 18, 21])
>>> np.sum(a, axis=1) # compute the sum over the columns (i.e. for each row)
array([ 6, 22, 38])
>>> np.sum(a, axis=-1) # axis=-1 is equivalent to the last axis (i.e. columns)
array([ 6, 22, 38])
Теперь, в вашем примере, то же самое относится и к вычислению функции softmax.Сначала вы должны определить, по какой оси вы хотите вычислить softmax, а затем указать это с помощью аргумента axis
.Кроме того, обратите внимание, что softmax по умолчанию применяется к последней оси (т.е. axis=-1
), поэтому, если вы хотите вычислить его по последней оси, вам не нужен слой Lambda выше.Просто используйте слой Activation
вместо:
from keras.layers import Activation
soft_out = Activation('softmax')(input_tensor)
Обновление 2: Существует также другой способ сделать это, используя слой Softmax
:
from keras.layers import Softmax
soft_out = Softmax(axis=desired_axis)(input_tensor)