2016-04-11 9 views
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?

+0

Sie benötigen, wie etwas zu nennen [ 'luaL_dofile'] (http://pgl.yoyo.org/luai/i/luaL_dofile) auf alle Bibliothekskomponenten . –

+0

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. –

+0

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

Antwort

0

Ich hatte das gleiche Problem auf meinem Mac und löste es mit

source ~/.profile 

dann Lua Script ausgeführt wird.

Eine vollständige Anleitung finden Sie hier: 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