2017-05-23 88 views
5

PyTorch'te, mimarileri çok yönlü olarak tanımlayabiliriz. Burada, Sequential modülünü kullanarak basit bir LSTM ağı oluşturmak istiyorum.Sıralı modüllü PyTorch'te basit LSTM

Lua meşalesi ben genelde birlikte gider:

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)) 

Ancak PyTorch içinde, geçen çıkışını almak için SelectTable eşdeğer bulmuyorum.

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)) 

cevap

2

LSTM cell documentationçıkışlarına göre parametresi (seq_len, toplu, hidden_size * num_directions) bir şekle sahiptir, böylece kolayca bu şekilde dizisinin son öğe olabilir:

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'de Tensor manipülasyonu ve Sinir ağları tasarımı, Torch'a kıyasla inanılmaz derecede kolaydır, bu nedenle nadiren konteynır kullanmak zorunda kalırsınız. Aslında, PyTorch for former Torch users PyTorch öğreticide belirtildiği gibi Autograd çevresinde inşa edilmiştir, böylece kaplar için endişelenmenize gerek kalmaz. Ancak, eski Lua Torch kodunuzu kullanmak isterseniz, Legacy package'a bir göz atabilirsiniz.

+0

Daha önce tam olarak bir LSTM kodladım. Ama sorum şu ki, 'nn.Sequential' sıralı modülünde bunu nasıl yaparsınız? LSTM kodunuzda iki çıktıyı, 'çıktı' ve 'hn' döndürür, 'Sıra' modasıyla çıktıyı [-1] nasıl alırsınız? – BiBi

+0

Cevabımı reddetmenin adil olduğunu düşünmüyorum, ancak Lua Torch'da olduğu gibi kapların kullanılmasının daha eski olduğuna dair daha fazla kanıt ekleyerek güncelledim. –

+0

[Bu gönderi] 'ye göre (https://discuss.pytorch.org/t/accessing-intermediate-data-in-nn-sequential/637), PyTorch'daki' Sıra 'modülünden kurtulmak istediler ancak bir konteyner olarak rahatlığı için tuttu. Bir "Sıralı" kabı içinde ara çıkışa erişmek mümkün değil sanırım. – BiBi