Отдельная активация от распределенного по времени слоя - PullRequest
0 голосов
/ 17 мая 2018

Я реализовал модель с несколькими последовательными слоями TimeDistributed. Мой последний слой определяется следующим образом:

y_pred = TimeDistributed(Dense(output_dim, name="y_pred", kernel_initializer=init, bias_initializer=init, activation="softmax"), name="out")(x)

Я хотел бы удалить активацию "softmax" последней для доступа к ее логитам, т.е.:

logit = TimeDistributed(Dense(output_dim, name="fc6", kernel_initializer=init, bias_initializer=init), name="logit")(x)

Если я хочу вернуть исходный y_pred, я написал:

(1) y_pred = TimeDistributed(Activation('softmax'), name="pred")(logit)

Я в замешательстве, потому что, похоже, также работает следующая строка:

(2) y_pred = Activation('softmax', name="pred")(logit)

Какой из них правильный? (1) или (2)? Привет

1 Ответ

0 голосов
/ 17 мая 2018

Фактически, он следует той же семантике, что и по умолчанию. Activation('softmax') применяет активацию к последнему axis=-1. Это аргумент по умолчанию . Таким образом, даже если вы используете TimeDistributed, вы применяете его к последнему измерению, но последнее без распределения будет быстрее, так как требует меньше операций.

...