【发布时间】:2016-07-15 23:44:11
【问题描述】:
我是torch的初学者,正在阅读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() 的nn.Module 中初始化的。
我的第二个问题是为什么直接使用return self.gradInput 而不是使用input 和gradOutput 计算self.gradInput?我的意思是self.gradInput = gradOutput * (deriv. of output wrt input)。
我的最后一个问题是Embedding.lua中这段代码的作用是什么:
-- we do not need to accumulate parameters when sharing
Embedding.sharedAccUpdateGradParameters = Embedding.accUpdateGradParameters
“共享时我们不需要累积参数”是什么意思?
【问题讨论】:
标签: lua neural-network deep-learning torch