Saya telah melalui contoh model bahasa LSTM ini di github (tautan) . Apa yang dilakukannya secara umum cukup jelas bagi saya. Tapi saya masih berjuang untuk memahami apa contiguous()
fungsi panggilan , yang terjadi beberapa kali dalam kode.
Misalnya pada baris 74/75 dari input kode dan urutan target LSTM dibuat. Data (disimpan dalam ids
) adalah 2 dimensi dimana dimensi pertama adalah ukuran tumpukan.
for i in range(0, ids.size(1) - seq_length, seq_length):
# Get batch inputs and targets
inputs = Variable(ids[:, i:i+seq_length])
targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
Jadi sebagai contoh sederhana, saat menggunakan ukuran batch 1 dan seq_length
10 inputs
dan targets
terlihat seperti ini:
inputs Variable containing:
0 1 2 3 4 5 6 7 8 9
[torch.LongTensor of size 1x10]
targets Variable containing:
1 2 3 4 5 6 7 8 9 10
[torch.LongTensor of size 1x10]
Jadi secara umum pertanyaan saya adalah, apa contiguous()
dan mengapa saya membutuhkannya?
Lebih lanjut saya tidak mengerti mengapa metode ini dipanggil untuk urutan target dan tetapi bukan urutan input karena kedua variabel terdiri dari data yang sama.
Bagaimana bisa targets
tidak bersebelahan dan inputs
masih bersebelahan?
EDIT:
Saya mencoba untuk tidak menelepon contiguous()
, tetapi ini mengarah ke pesan kesalahan saat menghitung kerugian.
RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231
Jadi jelas memanggil contiguous()
dalam contoh ini diperlukan.
(Agar ini tetap dapat dibaca, saya menghindari memposting kode lengkap di sini, itu dapat ditemukan dengan menggunakan tautan GitHub di atas.)
Terima kasih sebelumnya!
tldr; to the point summary
dengan ringkasan yang ringkas.