2017-05-23 19 views
5

PyTorch में, हम कई तरीकों से आर्किटेक्चर को परिभाषित कर सकते हैं। यहां, मैं Sequential मॉड्यूल का उपयोग करके एक साधारण एलएसटीएम नेटवर्क बनाना चाहता हूं।अनुक्रमिक मॉड्यूल के साथ PyTorch में सरल एलएसटीएम

लुआ की मशाल में मैं आमतौर पर साथ जाना होगा:

model = nn.Sequential() 
model:add(nn.SplitTable(1,2)) 
model:add(nn.Sequencer(nn.LSTM(inputSize, hiddenSize))) 
model:add(nn.SelectTable(-1)) -- last step of output sequence 
model:add(nn.Linear(hiddenSize, classes_n)) 

हालांकि, PyTorch में, मैं नहीं SelectTable के बराबर पिछले उत्पादन प्राप्त करने के लिए मिल रहा है।

nn.Sequential(
    nn.LSTM(inputSize, hiddenSize, 1, batch_first=True), 
    # what to put here to retrieve last output of LSTM ?, 
    nn.Linear(hiddenSize, classe_n)) 

उत्तर

2

LSTM cell documentationआउटपुट के अनुसार पैरामीटर (seq_len, बैच, hidden_size * num_directions) की एक आकृति है ताकि आप आसानी से इस तरह से क्रम का अंतिम तत्व ले जा सकते हैं:

rnn = nn.LSTM(10, 20, 2) 
input = Variable(torch.randn(5, 3, 10)) 
h0 = Variable(torch.randn(2, 3, 20)) 
c0 = Variable(torch.randn(2, 3, 20)) 
output, hn = rnn(input, (h0, c0)) 
print(output[-1]) # last element 

टॉरोर में टेन्सर मैनिपुलेशन और तंत्रिका नेटवर्क डिज़ाइन टॉर्च की तुलना में अविश्वसनीय रूप से आसान है, इसलिए आपको शायद ही कभी कंटेनर का उपयोग करना पड़ेगा। वास्तव में, जैसा कि ट्यूटोरियल PyTorch for former Torch users में बताया गया है PyTorch Autograd के आस-पास बनाया गया है ताकि आपको कंटेनर के बारे में चिंता करने की आवश्यकता न हो। हालांकि, अगर आप अपने पुराने लुआ टॉर्च कोड का उपयोग करना चाहते हैं तो आप Legacy package पर एक नज़र डाल सकते हैं।

+0

मैंने पहले से ही इस एलएसटीएम को इस सटीक तरीके से कोड किया है। लेकिन मेरा सवाल यह है कि आप इसे अनुक्रमिक मॉड्यूल के भीतर कैसे करेंगे 'एनएन। आवश्यक'? एलएसटीएम आपके कोड में दो मान, 'आउटपुट' और 'एचएन' देता है, 'अनुक्रमिक' फैशन में आउटपुट [-1] कैसे प्राप्त करें? – BiBi

+0

मुझे नहीं लगता कि मेरे जवाब को कम करना उचित है, हालांकि मैंने इसे इस तथ्य के अधिक प्रमाण डालने के लिए अपडेट किया है कि लूआ टॉर्च में कंटेनरों का उपयोग करना पुराना है। –

+0

[इस पोस्ट] के अनुसार (https://discuss.pytorch.org/t/accessing-intermediate-data-in-nn-sequential/637), वे PyTorch में 'अनुक्रमिक' मॉड्यूल से छुटकारा पाना चाहते थे लेकिन वे इसे एक कंटेनर के रूप में अपनी सुविधा के लिए रखा है। मुझे लगता है कि 'अनुक्रमिक' कंटेनर के भीतर मध्यवर्ती आउटपुट तक पहुंचना संभव नहीं है। – BiBi

संबंधित मुद्दे