Perbedaan antara `Dense` dan` TimeDistributedDense` dari `Keras`

34

Saya masih bingung tentang perbedaan antara Densedan TimeDistributedDensedari Kerasmeskipun sudah ada beberapa pertanyaan serupa ditanyakan di sini dan di sini . Orang banyak berdiskusi tetapi tidak ada kesimpulan yang disepakati bersama.

Dan meskipun, di sini , @fchollet menyatakan bahwa:

TimeDistributedDenseberlaku operasi yang sama Dense(terhubung penuh) untuk setiap catatan waktu tensor 3D.

Saya masih membutuhkan ilustrasi terperinci tentang apa sebenarnya perbedaan di antara mereka.

kelancaran03
sumber

Jawaban:

41

Katakanlah Anda memiliki data deret waktu dengan baris dan kolom yang ingin Anda beri makan ke lapisan dalam Keras. Sebelum Anda memasukkannya ke RNN, Anda harus membentuk kembali data sebelumnya menjadi tensor 3D. Jadi itu menjadi .N700SimpleRNN(200, return_sequence=True)N×700×1

RNN terbuka

Gambar diambil dari https://colah.github.io/posts/2015-08-Understanding-LSTMs

Di RNN, kolom Anda ("700 kolom") adalah garis waktu RNN. Data Anda diproses dari . Setelah memasukkan data ke RNN, sekarang memiliki 700 output yang ke , bukan ke . Ingat bahwa sekarang bentuk data Anda adalah yang merupakan sampel (baris) x timesteps (kolom) x saluran .t=1 tHai 700h1h700h1h200N×700×200

Dan kemudian, ketika Anda menerapkan a TimeDistributedDense, Anda menerapkan Denselayer pada setiap catatan waktu, yang berarti Anda menerapkan Denselayer pada masing-masing , , ..., . Yang berarti: sebenarnya Anda menerapkan operasi yang sepenuhnya terhubung di masing-masing salurannya ("200"), dari hingga . 1 " " hingga 700 " ".h1h2hth1h7001×1×2001×1×200

Kenapa kita melakukan ini? Karena Anda tidak ingin meratakan output RNN.

Mengapa tidak meratakan output RNN? Karena Anda ingin menjaga setiap nilai stempel waktu terpisah.

Mengapa memisahkan nilai setiap catatan waktu? Karena:

  • Anda hanya ingin berinteraksi dengan nilai-nilai di antara timestepnya sendiri
  • Anda tidak ingin memiliki interaksi acak antara berbagai waktu dan saluran.
rilut
sumber
Dan kemudian, ketika Anda menerapkan TimeDistributedDense, Anda menerapkan layer Dense pada setiap timestep -> Ini berarti setiap timestep berbagi bobot layer Dense? Dengan layer Dense tidak hanya berlaku untuk catatan waktu terakhir?
o0omycomputero0o
2
Mengapa TimeDistributedDense tidak digunakan dalam contoh Keras di blog.keras.io/… ?
user1934212
Karena TimeDistributedDense sudah usang. Sejak Keras 2.0, Dense dapat menangani tensor 2 dimensi dengan baik
rilut