2017-07-06 1 views
0

Ich versuche ein Caffe-Modell zu trainieren. Meine .prototxt-Datei verwendet benutzerdefinierte Python-Daten und -Loss-Layer.Dieses Programm benötigt Version 3.2.0 der Protokollpuffer-Laufzeitbibliothek, aber die installierte Version ist 2.6.1

Wenn ich den Trainings Befehl im Terminal ausführen, jedoch wird dieser Fehler ausgelöst:

[libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 3.2.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1. Please update your library. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in "google/protobuf/descriptor.pb.cc".) 
terminate called after throwing an instance of 'google::protobuf::FatalException' 

Mein Python Package Manager (pip) Version 3.2.0 von protobuf installiert ist, aber das System Version 2.6 .1 für ein Paket namens libprotoc. Ich bin nicht sicher, wie man angibt, dass die pip protobuf-Version diejenige ist, die ich für caffe verwenden möchte.

Auf einem anderen Computer, der Version 3.3.0 von Protobuf auf Pip und 2.6.1 für die Systemversion installiert hat, wurde ich den gleichen Fehler ausgelöst, außer dass das Programm Version 3.3.0 anstelle von Version 3.2 forderte. 0.

Am besten.

+0

Wir brauchen mehr Informationen. Wie viele verschiedene Versionen von Python hast du? Verwenden Sie virtuelle Umgebungen? Was genau bedeutet es "Mein Python Package Manager (pip) hat die Version 3.2.0 von protobuf installiert"? Welcher Python (wenn du mehr als 1 Pythons hast)? – phd

+0

Ich lief in einem Docker Conrainer mit Python 2.7. aber auf dem anderen Computer lief ich auf einem Linux, keinem virtuellen Container und bekam immer noch den Fehler, also glaube ich nicht, dass der Fehler damit zu tun hat. –

Antwort

0

Ich lief heute genau das gleiche Problem. Der Workaround, der für mich funktionierte, bestand darin, das Training von Caffes Python-Schnittstelle aus zu starten, anstatt es direkt von der Shell aus zu starten. Beispiel:

import caffe 

weights = '../ilsvrc-nets/vgg16-fcn.caffemodel' 
caffe.set_device(0) 
caffe.set_mode_gpu() 

solver = caffe.SGDSolver('solver.prototxt') 
solver.net.copy_from(weights) 

for _ in range(25): 
    solver.step(4000) 

Weg vom Kurs über das ist nur ein Beispiel/sehr Barebones, werden Sie laufen gegen die Validierung zu behandeln haben setzen Sie sich aber die pycaffe Schnittstelle sehr flexibel ist und ermöglicht es Ihnen, alles, was zu tun ist. Sie können weitere Details zu erfahren, wie das hier verwenden:

http://christopher5106.github.io/deep/learning/2015/09/04/Deep-learning-tutorial-on-Caffe-Technology.html

+0

danke für den Vorschlag, ich werde es eine Chance geben, wenn ich zurückkomme arbeite und berichte hier mit dem Ergebnis. –

+0

keine probs. Übrigens, das oben genannte wird auch mit dem Test-Set umgehen (so dass Sie es nicht wirklich tun müssen), wenn Sie es in Ihrer Solver-Datei eingerichtet haben. Ein einfacherer Weg dies zu tun, wenn Sie die feinkörnige Kontrolle der dortigen for-Schleife nicht brauchen, ist einfach 'solver.solve()'. – Kosta

+0

Hi Kosta, Ihre Lösung hat auch für mich funktioniert. Vielen Dank! –

Verwandte Themen