TimeDistributed merupakan salah satu (wrapper) layer pada keras yang berfungsi untuk membagi weight pada slice temporal pada data 3D. Susah difahami? Perhatikan contoh berikut.
Saya punya data X. Ukurannya (32, 10, 16), seperti contoh pada dokumentasi Keras.
x = np.random.random(size=(32, 10, 16)
Artinya, saya punya 32 data (sample). Setiap sample berisi data (10, 16): 10 baris dan 16 kolom. Ketika saya mengaplikasikan suatu layer (katakanlah, dan paling umum: Dense), agar bobot dari satu layer tersebut merata pada setiap elemen maka perlu kita gunakan timedistributed layer ini.
Perhatikan contoh berikut,
model0 = Sequential()
model0.add(Dense(8, input_shape=(10, 16)))
model0.summary()
Hasilnya adalah sebagai berikut,
---
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
time_distributed_1 (TimeDist (None, 10, 8) 136
=================================================================
Total params: 136
Trainable params: 136
Non-trainable params: 0
Bedakan dengan ini,
model1 = Sequential()
model1.add(Dense(8, input_shape=(10, 16)))
model1.summary()
Hasilnya,
---
Model: "sequential_5"
_________________________________________________________________
Layer (type) Shape Param #
=================================================================
dense_3 (Dense) (None, 10, 8) 136
=================================================================
Total params: 136
Trainable params: 136
Apa perbedaannya? Tidak ada. Saya juga bingung. Mari kita cari contoh lain, dari machinelearningmastery.
Sebenarnya, jika kita teliti, ada perbedaan bentuk output shape dari kedua contoh diatas, yang pertama memberikan bentuk ouput
(TimeDist(None, 8, 10)), sedangkan yang kedua hanya
(None, 8, 10).