2016-04-11 12 views
1

に私はLuaの機能を持っている:呼び出しLuaの関数(必要 'NN' で)C++

require 'nn' 
require 'image' 
require 'torch' 
require './lib/data_augmentation' 
function predict (x) do 
    model = torch.load("trained.t7") 
    img = image.load(x) 
    img_tensor = torch.DoubleTensor(2, 3, 32, 32) 
    img_tensor[1]:copy(img) 
    x = data_augmentation(img_tensor[1]) 
    preprocessing(x,params) 
    preds = torch.Tensor(4):zero() 
    step = 64 
    for j = 1, x:size(1), step do 
    batch = torch.Tensor(step, x:size(2), x:size(3), x:size(4)):zero() 
    n = step 
    if j + n > x:size(1) then 
     n = 1 + n - ((j + n) - x:size(1)) 
    end 
    batch:narrow(1, 1, n):copy(x:narrow(1, j, n)) 
    z = model:forward(batch):float() 
    for k = 1, n do 
     preds = preds + z[k] 
    end 
    end 
    preds:div(x:size(1)) 
    confidences, indices = torch.sort(preds,true) 
    return indices[1] 
end 
end 

私はC++でこの関数を呼び出したいが、私はエラーを取得しています:

PANIC: unprotected error in call to Lua API (attempt to call a nil value) 

が必要 '...'のため

C++はすべてのパッケージや他のLuaスクリプト(data_augmentationなど)を認識できるように、どうすればよいですか?

+0

あなたはライブラリコンポーネントのすべてに[ 'luaL_dofile'](http://pgl.yoyo.org/luai/i/luaL_dofile)のようなものを呼び出す必要があります。 –

+0

私はdata_augmentationのように作成したスクリプトのためにそれを行う方法を理解しています。しかし、 'nn'、 'optim'、 'image'、 'torch'の場合はどうすればいいですか?コンパイルコマンドを使ってパッケージに向かうパスを与えなければならないと思いますよね?前もって感謝します。 –

+0

このスクリプトを実行する前に 'package'ライブラリをロードする必要があると思います。だから、少なくとも 'base'と' package'ライブラリを開いて、新しいLua stetを作成してください。すべてのスタンドアロンライブラリをよりよく開くことができます。 – moteus

答えて

0

は、私は私のMac上でこれと同じ問題を抱えて、その後のluaスクリプトを実行している

source ~/.profile 

でそれを解決しました。ここで見つける

詳しい説明:torch.ch

# On Linux with bash 
source ~/.bashrc 
# On Linux with zsh 
source ~/.zshrc 
# On OSX or in Linux with none of the above. 
source ~/.profile 
関連する問題