Мое понимание activation
kwarg в tf.keras.layers.LSTM
такое же, как и для любого другого слоя (например, Dense
). Но следующий игрушечный пример сломается.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import LSTM
from numpy.random import uniform
m = Sequential([
LSTM(5, activation='softmax')
])
m.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy'
)
x = uniform(size=(10, 5, 3))
y_pred = m.predict(x)
assert all(y_pred.sum(axis=1) == 1), 'Predictions are not a valid categorical distribution'
Это не удастся. y_pred.sum(axis=1)
будет вектором случайных чисел с плавающей запятой от 0 до 1, сумма которых не равна 1. Например:
[0.5083836, 0.50286007, 0.504391, 0.5309103, 0.5131448, 0.53934443, 0.5301699, 0.49676484, 0.51985925, 0.5021868]
Кажется, что LSTM не применяет здесь допустимый softmax. Это задумано, и я просто не понимаю основ LSTMCell
?
Конечно, я могу добиться правильного распределения softmax, добавив tf.keras.layers.Softmax()
, но мне любопытно, почему это необходимо.