【问题标题】:Can't find where addmm function is defined in Torch Lua code找不到在 Torch Lua 代码中定义 addmm 函数的位置
【发布时间】:2018-11-07 01:56:47
【问题描述】:

我了解在 Torch Lua 中实现的神经网络。在通过线性层的反向传递过程中,它调用了一个名为 Linear:updateGradInput(https://github.com/torch/nn/blob/master/Linear.lua#L75)

function Linear:updateGradInput(input, gradOutput)
  if self.gradInput then

     local nElement = self.gradInput:nElement()
     self.gradInput:resizeAs(input)
     if self.gradInput:nElement() ~= nElement then
        self.gradInput:zero()
     end
     if input:dim() == 1 then
        self.gradInput:addmv(0, 1, self.weight:t(), gradOutput)
     elseif input:dim() == 2 then
        self.gradInput:addmm(0, 1, gradOutput, self.weight)
     end
     return self.gradInput
  end
end

在该函数中,通过调用名为 addmm(https://github.com/torch/nn/blob/master/Linear.lua#L86) 的函数来执行基本的矩阵乘法运算。我无法找到这个 addmm 函数的定义位置。

在 TH 库 (https://github.com/torch/torch7/blob/master/lib/TH/generic/THTensorMath.c#L1282) 中定义了一个 addmm 函数,但我不确定 Lua 代码如何连接到 C 中的此代码。

【问题讨论】:

    标签: lua torch


    【解决方案1】:

    刚刚弄明白了 Lua 代码和 C 代码之间的联系。在 Lua 代码中对 addmm 的调用指向这个函数(https://github.com/torch/torch7/blob/master/TensorMath.lua#L487-L510),这反过来又调用在此处定义的 C Torch 库中定义的 addmm 函数(https://github.com/torch/torch7/blob/master/lib/TH/generic/THTensorMath.c#L1282)。

    这很棘手,因为 Lua 通过字符串构造了对 C 函数的调用。

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 2022-10-06
      • 2018-06-25
      • 2017-05-22
      • 2013-08-30
      相关资源
      最近更新 更多