Torch / Lua中如何编辑已知包的原始抽象文件?

我试图在名为nn的Torch包的Module.lua 抽象文件中添加一个函数,但是我的主程序找不到它。

假设我的函数简单地是:

function printTry()
  print("printTry()");
end

我在Module.lua文件的末尾添加了此功能,我应该在我的Torch终端中使用它:

require 'nn';
perceptron = nn.Module();
perceptron:printTry()

但是系统生成了以下内容:

[string "perceptron.printTry();"]:1: attempt to call field 'printTry' (a nil value)
stack traceback:
    [string "perceptron.printTry();"]:1: in main chunk
    [C]: in function 'xpcall'
    /home/davide/torch/install/share/lua/5.1/trepl/init.lua:668: in function 'repl'
    ...vide/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:199: in main chunk
    [C]: at 0x004064d0

可能系统不知道我添加的这个新函数...我该怎么办才能使用这个新方法?

点赞
用户1442917
用户1442917

你只是定义了一个全局函数 printTry,但是你将其作为了 perceptron 的方法来调用。你需要将其定义为 Module 的一个字段(在 Module.lua 文件中,假设这是 nn.Sequential 返回的对象):

function Module:printTry()
  print("printTry()")
end
2016-02-18 23:02:06
用户117844
用户117844

使用 torch.getmetatable

require 'nn'
torch.getmetatable('nn.Module').printTry = function() print('PrintTry') end

perceptron = nn.Sequential()
perceptron:printTry()

翻译:

使用 torch.getmetatable

require 'nn'
torch.getmetatable('nn.Module').printTry = function() print('PrintTry') end

perceptron = nn.Sequential()
perceptron:printTry()

说明:

在这段 Lua 代码中,我们使用了 torch.getmetatable 方法来获取 nn.Module 的元表,并给其添加了一个名为 printTry 的函数。接着,我们创建了一个 nn.Sequential 神经网络模型对象 perceptron。最后,我们调用了 perceptron:printTry() 方法,执行了刚刚添加的函数 printTry。函数中简单地输出了一个字符串 "PrintTry"。

2016-02-19 01:50:45