我是火炬手的初学者,我正在阅读LSTM语言模型的代码。我对嵌入层(https://github.com/oxford-cs-ml-2015/practical6/blob/master/Embedding.lua)的实现感到困惑。
这是嵌入图层中的updateGradInput
函数:
function Embedding:updateGradInput(input, gradOutput)
if self.gradInput then
self.gradInput:resize(input:size())
return self.gradInput
end
end
我的第一个问题是为什么在这个函数中有一个if
语句,而不是像下面那样:
function Embedding:updateGradInput(input, gradOutput)
self.gradInput:resize(input:size())
return self.gradInput
end
我认为self.gradInput
始终是真的,因为self.gradInput
已在__init()
的{{1}}中初始化。
我的第二个问题是为什么nn.Module
直接而不是使用return self.gradInput
和self.gradInput
计算input
?我的意思是gradOutput
。
我的最后一个问题是此代码在Embedding.lua中的效果:
self.gradInput = gradOutput * (deriv. of output wrt input)
它是什么意思"我们不需要在共享"时累积参数?
答案 0 :(得分:0)
(1)是这样的,如果有人明确地nils gradInput,那么不要计算它 (2)因为嵌入层实际上没有gradInput,输入不可区分