2016-08-03 33 views
0

全部 - 我在獲取HDF5輸出文件在Caffe中工作時遇到了一些麻煩。有沒有人成功使用Caffe中的HDF5輸出文件圖層?如果是這樣,你可以提供一個例子或幫助我調試我的定義。我無法找到任何使用HD5F輸出功能的公共示例/教程,所以恐怕它可能不是很強大。在此先感謝Caffe HDF5輸出層錯誤 - 尋找工作示例

這裏是我的prototxt:

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

的來自Caffe錯誤剪斷如下複製。輸出文件'outfile.h5'存在並且包含一些數據。 HDF5輸入似乎工作正常

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)                 

回答

0

Your.prototxt如果完全罰款。您遇到此錯誤的原因是因爲您正在運行網絡進行多次迭代。在第一次迭代中,HDF5Output圖層將創建名稱爲./datah5/output.h5的文件。但在下一次迭代中,它將再次嘗試創建一個具有相同名稱並失敗的文件。由於該文件已存在,因此失敗。

要解決這個問題,你可以做兩件事。

  1. 一次只運行一個批次。取出輸出並重命名/移動它,然後再運行另一批次。
  2. 編輯caffe代碼以在輸出文件名中使用迭代計數。請參閱 - https://groups.google.com/forum/#!topic/caffe-users/zkGKk5UbInI
+0

是的,這是解釋它,非常感謝。 –

+0

@布拉德泰勒 - 接受這個答案,如果它解決了你的問題。 –

+0

https://github.com/BVLC/caffe/pull/5237 PR嘗試解決此問題@BradTaylor –