Понимание тензорного потока keras LSTM при активации = 'softmax' - PullRequest
0 голосов
/ 12 июля 2020

Мое понимание 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(), но мне любопытно, почему это необходимо.

1 Ответ

1 голос
/ 13 июля 2020

Это не в сумме, потому что активация здесь применяется непосредственно к каждому скрытому модулю, как сказал @joelthchao на GitHub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...