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 katmandaupdateGradInput
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?