Als Memorandum fiel es mir schwer, mich mit Shogun zu beschäftigen, einer Bibliothek, die maschinelles Lernen in verschiedenen Sprachen mit Python unterstützt, also werde ich eine Lösung schreiben.
offizielle Shogun-Website Shogun Github Seite
Die offizielle Website ist ziemlich schwer zu sehen und ich kann verschiedene Dinge nicht verstehen, da sie Informationen zu früheren Versionen enthält. Ich denke, es ist besser, das Wiki auf der Github-Seite zu lesen.
Installieren Sie vor der Installation von Shogun das, was Sie benötigen. Was Sie hier beachten müssen, ist die SWIG-Version. SWIG
Ab dem 05.06.2015 ist die neueste Version 3.0.5, aber anscheinend tritt bei der Installation von Shogun ein Segmentierungsfehler auf, wenn Shogun verwendet wird (hier. -toolbox / shogun / issue / 2313) oder hier hat eine Notation, die gelöst zu sein scheint, aber in meiner Umgebung erschien Segfault) Installieren Sie daher die SWIG-Version 2.x im Voraus und führen Sie ein Downgrade durch.
・ Wenn Sie Homebrew verwenden
Zunächst einmal, damit Sie die frühere Version von SWIG installieren können
$brew tap homebrew/versions
Ausführen. Auf diese Weise können Sie frühere Versionen der Formel anzeigen, wenn Sie die Brühsuche ausführen.
$brew search
homebrew/versions/swig2 homebrew/versions/swig304 swig
$brew install homebrew/versions/swig2
... #Es werden verschiedene angezeigt
$brew link swig2
#Wenn Sie bereits swig verwenden, brauen Sie Link--überschreiben überschreiben mit swig2
Damit ist die Vorbereitung um SWIG abgeschlossen.
Es scheint, dass dies mit Homebrew und MacPorts möglich ist, aber mit Homebrew ist das Python-Beispiel nicht installiert und es tritt ein Segmentierungsfehler auf, der nicht verwendet werden kann. Deshalb bringe ich es direkt von Git. Offiziell gibt es ein Beispiel für MacPorts, aber ich habe es nicht ausprobiert. Bitte lassen Sie mich wissen, wer es versucht hat.
$git clone https://github.com/shogun-toolbox/shogun.git
$cd shogun
$mkdir build
Erstellen Sie ein Verzeichnis mit dem Namen build in shogn gemäß der Formel.
Ich mache cmake von hier aus, aber es gibt viele Optionen, und ich konnte die Seite, die es speziell beschreibt, nicht finden. Daher ist es besser, das GUI-Tool von CMake zu verwenden. Bitte laden Sie [CMake] herunter (http://www.cmake.org/).
Starten Sie CMake und legen Sie fest, wo sich der Quellcode befindet und wo die Binärdateien erstellt werden sollen (siehe Abbildung). (Das folgende Beispiel zeigt das Klonen von Shogun auf dem Desktop.)
Dadurch werden verschiedene Optionen angezeigt, Sie überprüfen, was Sie benötigen, und CMake wird ausgeführt.
Dann starten Sie das Terminal und
$cd /Users/YOUR_NAME/Desktop/shogun/build
$make && make install
Ausführen.
$sudo find /usr -name "shogun" -type d
/usr/local/include/shogun
/usr/local/lib/python2.7/site-packages/shogun
/usr/local/share/shogun
Wenn, ist die Installation erfolgreich. Folgen Sie danach der offiziellen Website
$ export LD_LIBRARY_PATH=SHOGUN_INSTALL_DIR/lib
$ export PYTHONPATH=SHOGUN_INSTALL_DIR/lib/pythonX.Y/dist-packages/
Bitte eingeben. Ich denke, es hängt vom Installationsort und dem Betriebssystem ab, aber in meinem Fall (und den meisten Leuten, die es mit diesem Verfahren installiert haben)
$ export LD_LIBRARY_PATH=/usr/local/lib
$ export PYTHONPATH=/usr/local/lib/python2.7/site-packages/
Es wird sein.
Wenn Sie in diesem Zustand weiterhin versuchen, Shogun aus Python zu laden, tritt ein Segmentierungsfehler auf. Ändern Sie daher den Pfad der Bibliothek, auf die _modshogun.so verweist.
$sudo find /usr -name "*modshogun*"
/usr/local/lib/python2.7/site-packages/_modshogun.so
/usr/local/lib/python2.7/site-packages/modshogun.py
/usr/local/lib/python2.7/site-packages/modshogun.pyc
Es ist das oberste. Modshogun wird von SWIG während der Installation von Shogun generiert, und ich bin mir über die Details nicht sicher, aber es scheint eine Abkürzung für modulares Shogun zu sein. Es scheint, dass verschiedene Klassen dynamisch geladen und aufgerufen werden können. Ich kenne die Details nicht.
Werfen wir einen Blick auf die Bibliotheken, von denen dieses _modshogun abhängt.
$cd /usr/local/lib/python2.7/site-packages/
$otool -L _modshogun.so
_modshogun.so:
libshogun.17.dylib (compatibility version 17.0.0, current version 17.1.0)
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.6)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/local/lib/libglpk.35.dylib (compatibility version 37.0.0, current version 37.0.0)
/usr/local/opt/arpack/libexec/lib/libarpack.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/local/lib/libopencv_videostab.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/lib/libopencv_superres.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_stitching.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_contrib.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_nonfree.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_ocl.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_gpu.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_photo.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_objdetect.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_legacy.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_video.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_ml.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_calib3d.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_features2d.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_highgui.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_imgproc.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_flann.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libopencv_core.2.4.dylib (compatibility version 2.4.0, current version 2.4.11)
/usr/local/lib/libnlopt_cxx.0.dylib (compatibility version 9.0.0, current version 9.2.0)
/usr/local/lib/libColPack.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/lib/libjson-c.2.dylib (compatibility version 3.0.0, current version 3.1.0)
/usr/local/opt/libxml2/lib/libxml2.2.dylib (compatibility version 12.0.0, current version 12.2.0)
/usr/local/lib/libhdf5.9.dylib (compatibility version 10.0.0, current version 10.0.0)
/usr/local/lib/libsz.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 8.0.0)
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
/usr/local/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.1.0)
/usr/local/lib/libsnappy.1.dylib (compatibility version 4.0.0, current version 4.1.0)
/usr/local/lib/liblzo2.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/local/lib/libprotobuf.9.dylib (compatibility version 10.0.0, current version 10.1.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
Es kommt in einer Reihe wie diese heraus. In meinem Fall habe ich es mit Python-Modular- und OpenCV-Optionen installiert, also sieht es so aus. Ich denke, dieser Teil wird sich je nach Person ändern.
Oben drauf
/System/Library/Frameworks/Python.framework/Versions/2.7/Python
Scheint von Anfang an Python unter OSX installiert zu sein, und es scheint verschiedene Gründe zu geben, aber da gesagt wird, dass dies die Ursache für Segmentierungsfehler ist, werde ich dies ändern.
Sie können den Pfad der abhängigen Bibliotheken von _modshogun.so mit dem Namen install_name_tool ändern.
$install_name_tool -Pfad ändern Sie möchten den Pfad ändern, um den Bibliotheksnamen zu ändern
Mit diesem Gefühl
$install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python /usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib _modshogun.so
Ich habe so geschrieben. Es ist der Weg, der geändert werden muss, aber ich habe ihn durch die gemeinsam genutzte Bibliothek der Python-Version geleitet, die bei der Installation von Shogun herauskam. Ich weiß nicht, ob dies korrekt ist. Bitte lassen Sie mich wissen, wer Sie sind.
Versuchen Sie nun einmal, Python zu starten.
$python
Python 2.7.10 (default, Jun 3 2015, 16:47:53)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import modshogun
>>> import shogun
>>>
Der Segmentierungsfehler ist verschwunden. Es war lang...
Ich werde auch die Probe verschieben. Wechseln Sie von Git zum geklonten Shogun-Verzeichnis
$python examples/undocumented/python_modular/graphical/svm.py
Wenn ja, sollte es kein Problem geben ... (Ich bin nicht sicher, ob das wirklich in Ordnung ist, weil ich es gerade geschafft habe ...)
Das Beispiel enthält übrigens verschiedene Beispiele. Vielleicht möchten Sie einen Blick darauf werfen. Es gibt eine Referenz auf der offiziellen Website, aber es ist ziemlich rau, so dass es möglicherweise schneller ist, den Beispielcode zu lesen und zu verstehen.
Wenn Sie bisher einen Segmentierungsfehler erhalten und im Fehlerprotokoll etwas wie "wrap_delete {irgendein Klassenname}" angezeigt wird und zum Zeitpunkt von PyArg_UnpackTuple ein Segmentierungsfehler auftritt, liegt dies an der SWIG-Version. Es besteht eine hohe Wahrscheinlichkeit von. Überprüfen Sie die Version. Wenn es sich um eine 3.x-Serie handelt, funktioniert sie möglicherweise, wenn Sie sie in die 2.x-Serie ändern und erneut installieren.
Recommended Posts