Caffe HDF5 输出层错误 - 寻找工作示例

Caffe HDF5 Output Layer error - looking for working example

全部 - 我在让 HDF5 输出文件在 Caffe 中工作时遇到了一些问题。有没有人在 Caffe 中成功使用过 HDF5 输出文件层?如果可以,您能否提供一个示例或帮助我调试我的定义。我无法使用 HD5F 输出功能找到任何 public examples/tutorials,所以恐怕它可能还不是很可靠。提前致谢

这是我的原型文本:

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)                                                                   

Your.prototxt 如果完全没问题。您收到此错误的原因是因为您是 运行 多次迭代的网络。在第一次迭代中,HDF5Output 层将创建一个名为 ./datah5/output.h5 的文件。但在下一次迭代中,它将再次尝试创建同名文件并失败。它失败了,因为文件已经存在。

要解决这个问题,您可以做两件事。

  1. 运行一次只能一批。在 运行 另一批之前获取输出并 rename/move 它。
  2. 编辑 caffe 代码以在输出文件名中使用迭代计数。参考这个 - https://groups.google.com/forum/#!topic/caffe-users/zkGKk5UbInI