Отдельная активация от распределенного по времени слоя
Я реализовал модель с несколькими последовательными слоями 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 ответ
Решение
Это фактически следует той же семантике, что и по умолчанию Activation('softmax')
применяет активацию к последнему axis=-1
, Это аргумент по умолчанию. Так что даже если вы используете TimeDistributed
вы применяете его к последнему измерению, но последнее без распределения будет быстрее, так как оно включает меньше операций.