2016-03-28 16 views
0

Ben bir meşale başlatıcısıyım ve LSTM dil modellerinin kodunu okuyorum. Gömme tabakasının uygulanmasında kafam karıştı (https://github.com/oxford-cs-ml-2015/practical6/blob/master/Embedding.lua). Meşale: gömme katmanı uygulaması

Bu

gömme katmanda updateGradInput fonksiyonudur:

function Embedding:updateGradInput(input, gradOutput) 
    self.gradInput:resize(input:size()) 
    return self.gradInput 
end 

ben self.gradInput düşünüyorum yapacaktır: yerine sadece aşağıdaki gibi daha bu işlevinde if deyim var neden

function Embedding:updateGradInput(input, gradOutput) 
    if self.gradInput then 
    self.gradInput:resize(input:size()) 
    return self.gradInput 
    end 
end 

Benim ilk soru Her zaman doğru olabilir, çünkü self.gradInput, nn.Module'un __init() sürümünde başlatıldı.

İkinci soruum, return self.gradInput neden input ve gradOutput kullanarak self.gradInput hesaplamak yerine doğrudan? self.gradInput = gradOutput * (deriv. of output wrt input) demek istiyorum.

Benim son soru nedir Embedding.lua bu kodun etkisi:

-- we do not need to accumulate parameters when sharing 
Embedding.sharedAccUpdateGradParameters = Embedding.accUpdateGradParameters 

o "paylaşmak koşuluyla biz parametreleri birikir gerekmez" nin ne anlama geliyor?

cevap

0

(1) yani birileri açıkça nils gradInput, sonra hesaplamak yoksa gömme katmanlar aslında bir gradInput yok çünkü , girişler türevlenebilir değildir (2) olduğu