1
Ich habe eine Lua-Funktion:Anruf lua-Funktion (mit require 'nn') in 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
Ich mag diese Funktion in C++ nennen, aber ich erhalte eine Fehlermeldung:
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
wegen der Anforderung '...'
Was soll ich tun, damit C++ alle Pakete oder andere Lua-Skripte (wie data_augmentation) erkennen kann?
Sie benötigen, wie etwas zu nennen [ 'luaL_dofile'] (http://pgl.yoyo.org/luai/i/luaL_dofile) auf alle Bibliothekskomponenten . –
Ich verstehe, wie man das für die Skripte macht, die ich wie die data_augmentation erstellt habe. Aber für 'nn', 'optim', 'image' und 'fackel', was soll ich schreiben? Ich gehe davon aus, dass ich den Pfad zu den Paketen mit meinem Kompilierbefehl angeben muss, oder? Vielen Dank im Voraus. –
Ich denke, dass Sie 'package' Bibliothek laden müssen, bevor Sie dieses Skript ausführen. So erstellen Sie neue Lua Stet, öffnen Sie mindestens "Base" und "Paket" -Bibliothek. Möge es besser sein, alle Standardbibliotheken zu öffnen. – moteus