2016-07-11 25 views
0

Ich trainierte mein Modell in R mit XGBoost und jetzt müssen Vorhersagen in C++. Ich versuche, die Modelldatei in C++ unter Verwendung XGBoosterLoadModel Funktion zu laden.Lesen XGBoost Modell in C++

Mein Code kompiliert gut, aber es schlägt fehl, meine Unit-Test-Funktionen zu entdecken. Wenn ich den Anruf zu Funktion XGBoosterLoadModel entferne, funktioniert alles gut und ich kann meine Komponententests sehen.

Hier ist, was ich in meiner Unit-Testdatei habe. Jeder Hinweis auf, was ich vermisse, wäre wirklich geschätzt:

#include <xgboost/c_api.h> 
    #include "stdafx.h" 
    #include <google/gtest/gtest.h> 

    namespace UnitTests 
    { 
     TEST(XGBoost, HysteresisPeakDetection_WithEmptyInput_ReturnsFalse) 
     { 
      const char *fname; 
      BoosterHandle handle; 

      int a = XGBoosterLoadModel(handle, fname); 
     } 
    } 

Antwort

0

Sie müssen zuerst Ihren Griff zuordnen. Dieser Code funktioniert für mich:

BoosterHandle x; 
XGBoosterCreate(0,0,&x); 

int y = XGBoosterLoadModel(x,model_filename); 
+0

Dank @amit. Das Problem ist leider nicht nur diese spezielle Funktion. Auch eine Funktion ohne Eingabe (wie XGBGetLastError()) verursacht das Problem! Ich glaube es liegt an verschiedenen Laufzeiten für xgboost und mein Projekt! XGBoost benötigt statische Laufzeit! Aber selbst wenn ich die Laufzeit meines Projekts in static ändere, bleibt das Problem bestehen! –

+0

@VahidZadeh Wenn Sie einen Code posten, der den Fehler reproduziert, könnte ich helfen können. Ich habe gerade ein Projekt mit xgboost, Training in R, Vorhersage in C++ beendet und zahlreiche Probleme erfolgreich überwunden – amit

+0

Vielen Dank für die Antworten @amit. Ich bin froh, dass Sie die Probleme überwunden haben. Ich bin mir sicher, dass ich ihnen auch gegenübertreten werde. Also, ich schätze Ihr Angebot zu helfen. Der Code, den ich im Fragenkörper habe, ist im Grunde der gesamte Code, den ich in der Testdatei habe. Mein Projekt hat andere Dateien, die gut funktionieren, wenn ich diesen Testcode aus dem Projekt entferne. Ich glaube, das Problem ist, wie ich die Zielbibliothek für xgboost eingefügt (oder gebaut?) Habe. Aber ich bin mir nicht sicher. Ich folgte den Installationsanweisungen. Hatten Sie Probleme beim Hinzufügen der Bibliotheksdatei zu Ihrem Projekt? –