Распределение времени по расписанию против TimeDistributedDense Keras

Я прошел официальную документацию но все еще не могу понять, что на самом деле TimeDistributed делает в качестве слоя в модели Keras?

Я не мог понять разницу между TimeDistributed и TimeDistributedDense? Когда кто-то будет использовать TimeDistributedDense? Следует ли только сократить набор учебных данных? Имеет ли она другую выгоду?

Может ли кто-нибудь объяснить с помощью точного примера, что делают эти два типа оберток слоев?

Ответ 1

Итак, в основном TimeDistributedDense был введен сначала в ранних версиях Keras, чтобы применить шаг Dense поэтапно к последовательностям. TimeDistributed - это оболочка Keras, которая позволяет получить любой статический (непоследовательный) слой и применять его последовательно. Так, если, например, ваш слой принимает в качестве входного сигнала что-то из формы (d1, .., dn) благодаря обертке TimeDistributed, ваш слой может принять ввод с формой (sequence_len, d1, ..., dn), применяя слой, предоставленный X[0,:,:,..,:], X[1,:,...,:], ..., X[len_of_sequence,:,...,:].

Примером такого использования может быть использование, например, предварительно сверлильный сверточный слой к короткому видеоклипу, применяя TimeDistributed(conv_layer), где conv_layer применяется к каждому кадру клипа. Он производит последовательность выходов, которые затем могут быть потреблены следующим повторным или TimeDistributed уровнем.

Хорошо знать, что использование TimeDistributedDense обесценивается, и лучше использовать TimeDistributed(Dense).

Ответ 2

TimeDistributedDense совпадает с TimeDistributed с той лишь разницей, что TimeDistributed может использоваться с разными типами слоев, а не только с плотным слоем.

Документация Keras говорит, что около TimeDistributed:

"Обратите внимание, что это строго эквивалентно использованию layers.core.TimeDistributedDense. Однако то, что отличается от TimeDistributed, заключается в том, что его можно использовать с произвольными слоями, а не только с Dense, например, с слоем Convolution2D