Cara mengatur panjang lapisan input di lstm

Saya sedang membangun model LSTM untuk mengklasifikasikan beberapa data ulasan menggunakan Keras. Outputnya hanya 1 atau 0.

Saya menambahkan lapisan penyematan kata sebelum memasukkan data teks ke lapisan lstm. Bagian dari kode saya ditunjukkan di bawah ini. Ini max_feature adalah ukuran kosakata. Ukuran vektor kata adalah 2. Ukuran setiap dokumen maksimal. Semua dokumen sudah diisi dengan panjang yang sama.

Namun saya selalu bingung dengan panjang lapisan LSTM. Apakah panjangnya harus sama dengan panjang dokumen saya (maxlen)? Masukkan semua kata di setiap dokumen, dan dapatkan hasilnya?.....

Ada cukup banyak sumber online yang menjelaskan LSTM. Namun dari segi implementasinya, saya rasa belum banyak yang memberikan penjelasan yang jelas...

Sangat menghargai jika seseorang dapat menjelaskan hal ini.

# max_features: vocabulary size
# word vector size: 2
# maxlen: my document size, already padded to the same length
# Build our model
print('Build model...')
model = Sequential()
model.add(Embedding(input_dim=max_features, output_dim= 2, input_length=maxlen ))
model.add(LSTM(units= ???? ))  
model.add(Dense(1))

model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',            
              optimizer='adam',
              metrics=['accuracy'])

person zesla    schedule 24.02.2019    source sumber


Jawaban (1)


Jumlah unit pada LSTM tidak relevan dengan dimensi data, unit adalah jumlah neuron/node pada lapisan LSTM. LSTM adalah jaringan rekursif, yang parameternya digunakan berulang kali pada lapisan yang sama: gambar diambil dari http://colah.github.io/posts/2015-08-Understanding-LSTMs/

'A' mewakili sel LSTM, dan jumlah 'A sama dengan panjang masukan Anda. Unit mewakili dimensi tersembunyi 'A'.

person ian    schedule 24.02.2019
comment
terima kasih banyak atas klarifikasinya! Jadi besarnya A 'otomatis disesuaikan' dengan panjang yang sama dengan panjang dokumen saya. Satu pertanyaan lagi adalah bagaimana ukuran vektor kata saya (2 dalam hal ini) sesuai dengan struktur lstm? apakah itu dimensi x0, x1, x2....? - person zesla; 24.02.2019
comment
Jumlah 'A dalam kasus Anda adalah maxlen (input_length = maxlen). Saya tidak begitu yakin saya memahami pertanyaan Anda dengan ukuran vektor kata = 2, kata-kata Anda menurut saya diwakili oleh ukuran 1-hot - input_dim=vocabulary (yang mungkin lebih besar dari 2). - person ian; 24.02.2019
comment
Saya memiliki lapisan penyematan kata. Jika saya memahaminya dengan benar, ia mempelajari vektor kata dari kosakata (kata-ke-vec). Untuk setiap kata, itu direpresentasikan sebagai bentuk vektor. Disini saya hanya menggunakan vektor kata 2d saja, namun bisa berdimensi apa saja. Apa yang saya tidak sepenuhnya mengerti adalah bagaimana vektor kata ini dimasukkan ke dalam jaringan lstm. - person zesla; 24.02.2019
comment
Lapisan penyematan mengubah setiap kata menjadi vektor (w2v), kemudian vektor tersebut dimasukkan ke dalam LSTM dengan perkalian matriks. Misalnya. S = a1 a2 Lapisan penyematan akan mengubah a1 menjadi representasi vektornya, kemudian memasukkannya ke sel LSTM pertama. Dimensi perkalian matriks adalah: kata tersemat: |1| x |output redup (2 dalam kasus Anda)| LSTM redup tersembunyi (unit): |unit|. Untuk musim panas, transformasinya dari |1| x |keluaran redup| ke |1| x |unit|, jadi vektor tersemat dari |1| x |keluaran redup| dikalikan dengan matriks bobot |output dim| x |satuan|. Semoga ini membantu. - person ian; 25.02.2019
comment
jadi menurut skema yang Anda letakkan di sana, setiap x0, x1,.. adalah vektor kata (2d dalam kasus saya), bukan? Masing-masing dikalikan dengan matriks bobot 2xunit, yang terjadi di setiap blok A. Terima kasih banyak. - person zesla; 25.02.2019
comment
Ya kamu benar. Lebih detailnya: setiap masukan adalah vektor 1-hot seukuran kosakata redup, lapisan penyematan akan mengubahnya menjadi redup 2d. - person ian; 25.02.2019