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
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 t o 700 h1h700h1h200N× 700 × 200
Dan kemudian, ketika Anda menerapkan a TimeDistributedDense
, Anda menerapkan Dense
layer pada setiap catatan waktu, yang berarti Anda menerapkan Dense
layer 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.