Więc - w zasadzie TimeDistributedDense
został wprowadzony jako pierwszy we wczesnych wersjach Keras, aby kolejno zastosować warstwę Dense
. TimeDistributed
to opakowanie Keras, które umożliwia pobranie dowolnej warstwy statycznej (niesekwencyjnej) i zastosowanie jej w sposób sekwencyjny. Więc jeśli np. twoja warstwa przyjmuje jako dane wejściowe coś o kształcie (d1, .., dn)
dzięki wrapperowi TimeDistributed
twoja warstwa może przyjąć dane wejściowe o kształcie (sequence_len, d1, ..., dn)
przez nałożenie warstwy dostarczonej do X[0,:,:,..,:]
, X[1,:,...,:]
, ...
, X[len_of_sequence,:,...,:]
.
Przykładem takiego użycia może być użycie np. przygotowana warstwa splotowa do krótkiego klipu wideo poprzez zastosowanie TimeDistributed(conv_layer)
, gdzie conv_layer
jest stosowana do każdej klatki klipu. Wytwarza sekwencję wyjść, które mogą następnie zostać wykorzystane przez kolejną powtarzalną warstwę lub warstwę TimeDistributed
.
Warto wiedzieć, że korzystanie z TimeDistributedDense
jest amortyzowane i lepiej jest używać TimeDistributed(Dense)
.