मैं जीथब (लिंक) पर एक LSTM भाषा मॉडल के इस उदाहरण से गुजर रहा था । यह सामान्य रूप से मेरे लिए बहुत स्पष्ट है। लेकिन मैं अभी भी समझने में संघर्ष कर रहा हूं कि कॉलिंग क्या contiguous()
करता है, जो कोड में कई बार होता है।
उदाहरण के लिए, लाइन इनपुट के 74/75 लाइन में और LSTM के लक्ष्य अनुक्रम बनाए जाते हैं। डेटा (इसमें संग्रहीत ids
) 2-आयामी है जहां पहला आयाम बैच आकार है।
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())
तो एक साधारण उदाहरण के रूप में, बैच का आकार 1 और का उपयोग करते समय seq_length
10 inputs
और targets
इस प्रकार है:
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]
तो सामान्य तौर पर मेरा सवाल यह है contiguous()
कि मुझे क्या करना चाहिए और इसकी आवश्यकता क्यों है?
इसके अलावा, मुझे समझ में नहीं आता कि लक्ष्य अनुक्रम के लिए विधि क्यों कहा जाता है, लेकिन इनपुट अनुक्रम नहीं है क्योंकि दोनों चर एक ही डेटा के शामिल हैं।
कैसे targets
बेकाबू हो सकता है और inputs
अभी भी सन्निहित हो सकता है?
संपादित करें:
मैंने कॉलिंग छोड़ने की कोशिश की contiguous()
, लेकिन इससे नुकसान की गणना करते समय त्रुटि संदेश जाता है।
RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231
तो जाहिर contiguous()
है इस उदाहरण में कॉल करना आवश्यक है।
(इस पठनीय को बनाए रखने के लिए मैंने यहां पूरा कोड पोस्ट करने से परहेज किया, यह ऊपर GitHub लिंक का उपयोग करके पाया जा सकता है।)
अग्रिम में धन्यवाद!
tldr; to the point summary
बिंदु सारांश के साथ लिखें ।