【问题标题】:Torch: the implementation of embedding layerTorch:嵌入层的实现
【发布时间】: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 而不是使用inputgradOutput 计算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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 2016-12-30
      • 2019-08-20
      • 2016-10-03
      • 2018-05-31
      • 2019-02-22
      • 2020-12-10
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多