2016-08-03 66 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 –