Отдельная активация от распределенного по времени слоя

Я реализовал модель с несколькими последовательными слоями 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 вы применяете его к последнему измерению, но последнее без распределения будет быстрее, так как оно включает меньше операций.

Другие вопросы по тегам