我尝试在名为Module.lua
的Torch包中向nn
abstract file添加一个函数,但我的主程序找不到它。
假设我的功能很简单:
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
系统可能不知道我添加的这个新功能......我该怎么做才能使用这个新方法?
答案 0 :(得分:1)
使用torch.getmetatable:
require 'nn'
torch.getmetatable('nn.Module').printTry = function() print('PrintTry') end
perceptron = nn.Sequential()
perceptron:printTry()
答案 1 :(得分:0)
您只是定义了一个全局函数printTry
,但您将其称为perceptron
上的方法。您需要将其定义为Module
的字段(在Module.lua
文件中,假设这是nn.Sequential
返回的内容):
function Module:printTry()
print("printTry()")
end