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など)を認識できるように、どうすればよいですか?
あなたはライブラリコンポーネントのすべてに[ 'luaL_dofile'](http://pgl.yoyo.org/luai/i/luaL_dofile)のようなものを呼び出す必要があります。 –
私はdata_augmentationのように作成したスクリプトのためにそれを行う方法を理解しています。しかし、 'nn'、 'optim'、 'image'、 'torch'の場合はどうすればいいですか?コンパイルコマンドを使ってパッケージに向かうパスを与えなければならないと思いますよね?前もって感謝します。 –
このスクリプトを実行する前に 'package'ライブラリをロードする必要があると思います。だから、少なくとも 'base'と' package'ライブラリを開いて、新しいLua stetを作成してください。すべてのスタンドアロンライブラリをよりよく開くことができます。 – moteus