2016-08-03 36 views
0

Alle - Ich habe ein Problem mit HDF5-Ausgabedateien in Caffe arbeiten. Hat jemand die HDF5-Ausgabedateiebene in Caffe erfolgreich verwendet? Wenn ja, könnten Sie ein Beispiel geben oder mir helfen, meine Definition zu debuggen. Ich kann keine öffentlichen Beispiele/Tutorials finden, die die HD5F-Ausgabefunktion verwenden. Daher befürchte ich, dass sie noch nicht sehr robust ist. Vielen Dank im VorausCaffe HDF5 Ausgabeschicht Fehler - auf der Suche nach Arbeitsbeispiel

Hier ist meine prototxt:

layer { 
    type: "HDF5Output" 
    name: "hdf5output" 
    bottom: "Ytest" # 
    bottom: "ip2"  # 
    hdf5_output_param { 
    file_name: "./datah5/output.h5" 
    } 
    include { phase: TEST } 
} 

Der Caffe Fehler Snip ist unten kopiert. Die Ausgabedatei 'outfile.h5' existiert und enthält einige Daten. HDF5 Eingang scheint in Ordnung zu sein

I0803 20:30:36.776832 27929 solver.cpp:338] Iteration 0, Testing net (#0)        
I0803 20:30:36.785679 27929 hdf5_output_layer.cpp:32] Saving HDF5 file ./datah5/output.h5    
I0803 20:30:36.785854 27929 hdf5_output_layer.cpp:37] Successfully saved 100 rows      
I0803 20:30:36.792243 27929 hdf5_output_layer.cpp:32] Saving HDF5 file ./datah5/output.h5    
HDF5-DIAG: Error detected in HDF5 (1.8.11) thread 70366426137120:          
    #000: ../../../src/H5D.c line 170 in H5Dcreate2(): unable to create dataset       
    major: Dataset                      
    minor: Unable to initialize object                 
    #001: ../../../src/H5Dint.c line 439 in H5D__create_named(): unable to create and link to dataset 
    major: Dataset                      
    minor: Unable to initialize object                 
    #002: ../../../src/H5L.c line 1638 in H5L_link_object(): unable to create new link to object   
    major: Links                      
    minor: Unable to initialize object                 
    #003: ../../../src/H5L.c line 1882 in H5L_create_real(): can't insert link       
    major: Symbol table                    
    minor: Unable to insert object                  
    #004: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal path traversal failed   
    major: Symbol table                    
    minor: Object not found                   
    #005: ../../../src/H5Gtraverse.c line 641 in H5G_traverse_real(): traversal operator failed   
    major: Symbol table                    
    minor: Callback failed                    
    #006: ../../../src/H5L.c line 1674 in H5L_link_cb(): name already exists        
    major: Symbol table                    
    minor: Object already exists                  
F0803 20:30:36.792457 27929 hdf5.cpp:101] Check failed: status >= 0 (-1 vs. 0) Failed to make float da 
taset data                        
*** Check failure stack trace: ***                  
    @  0x3fff835520f0 (unknown)                 

Antwort

0

Your.prototxt wenn vollkommen in Ordnung. Der Grund für diesen Fehler ist, dass Sie das Netzwerk für mehrere Iterationen ausführen. In der ersten Iteration erstellt der Layer HDF5Output eine Datei mit dem Namen ./datah5/output.h5. In der nächsten Iteration wird jedoch erneut versucht, eine Datei mit demselben Namen zu erstellen, die fehlschlägt. Es schlägt fehl, weil die Datei bereits existiert.

Um damit umzugehen, können Sie zwei Dinge tun.

  1. Führen Sie jeweils nur eine Charge aus. Nehmen Sie die Ausgabe und benennen Sie sie um, bevor Sie einen anderen Stapel ausführen.
  2. Bearbeiten Sie den Caffe-Code, um den Iterationszähler im Namen der Ausgabedatei zu verwenden. Siehe hierzu - https://groups.google.com/forum/#!topic/caffe-users/zkGKk5UbInI
+0

ja das erklärt es, Vielen Dank. –

+0

@Brad Taylor - Akzeptieren Sie dies als die Antwort, wenn es Ihre Frage gelöst hat. –

+0

https://github.com/BVLC/caffe/pull/5237 PR versuchen und beheben dieses Problem @BradTaylor –