火炬:嵌入层

时间:2016-03-28 17:03:30

标签: lua neural-network deep-learning 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()的{​​{1}}中初始化。

我的第二个问题是为什么nn.Module直接而不是使用return self.gradInputself.gradInput计算input?我的意思是gradOutput

我的最后一个问题是此代码在Embedding.lua中的效果:

self.gradInput = gradOutput * (deriv. of output wrt input)

它是什么意思"我们不需要在共享"时累积参数?

1 个答案:

答案 0 :(得分:0)

(1)是这样的,如果有人明确地nils gradInput,那么不要计算它 (2)因为嵌入层实际上没有gradInput,输入不可区分