Github (bağlantı) üzerinde bir LSTM dil modeli örneğini inceliyordum . Genel olarak ne yaptığı benim için oldukça açık. Ama hala contiguous()
kodda birkaç kez gerçekleşen aramanın ne yaptığını anlamakta zorlanıyorum .
Örneğin kod girişinin 74/75 satırında ve LSTM'nin hedef dizileri yaratılır. Veri (depolanan ids
) 2 boyutludur ve birinci boyut, parti boyutudur.
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())
Basit bir örnek olarak, parti boyutu 1 ve seq_length
10 kullanıldığında inputs
ve targets
şuna benzer:
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]
Yani genel olarak sorum şu, ne contiguous()
işe yarıyor ve neden buna ihtiyacım var?
Ayrıca, yöntemin neden hedef dizi için çağrıldığını ve her iki değişken de aynı verilerden oluştuğundan girdi dizisinin neden çağrıldığını anlamıyorum.
Nasıl bitişik targets
olmayan ve inputs
hala bitişik olabilir?
DÜZENLEME:
Aramayı dışarıda bırakmaya çalıştım contiguous()
, ancak bu, kaybı hesaplarken bir hata mesajına yol açıyor.
RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231
contiguous()
Bu örnekte açıkça aramak gerekli.
(Bunu okunabilir kılmak için kodun tamamını buraya göndermekten kaçındım, yukarıdaki GitHub bağlantısını kullanarak bulunabilir.)
Şimdiden teşekkürler!
tldr; to the point summary
özetle özetle bir yazmanızı öneririm .