Ich bin ein Anfänger der Taschenlampe und ich lese den Code der LSTM-Sprachmodelle. Ich bin verwirrt über die Implementierung der Einbettungsschicht (https://github.com/oxford-cs-ml-2015/practical6/blob/master/Embedding.lua).Taschenlampe: die Implementierung der Einbettungsschicht
Dies ist die updateGradInput
Funktion in Einbettungsschicht:
function Embedding:updateGradInput(input, gradOutput)
if self.gradInput then
self.gradInput:resize(input:size())
return self.gradInput
end
end
Meine erste Frage ist, warum in dieser Funktion eher eine if
Aussage gibt es nicht nur wie unten:
function Embedding:updateGradInput(input, gradOutput)
self.gradInput:resize(input:size())
return self.gradInput
end
Ich denke self.gradInput
wird immer wahr, weil self.gradInput
in __init()
von nn.Module
initialisiert wurde.
Meine zweite Frage ist, warum return self.gradInput
direkt anstelle self.gradInput
mit input
und gradOutput
berechnet? Ich meine self.gradInput = gradOutput * (deriv. of output wrt input)
.
Meine letzte Frage ist, was die Wirkung dieser Code in Embedding.lua:
-- we do not need to accumulate parameters when sharing
Embedding.sharedAccUpdateGradParameters = Embedding.accUpdateGradParameters
Was bedeutet es, von „wir brauchen keine Parameter zu akkumulieren, wenn sharing“?