Use hdf5 as caffe input, error: HDF5Data does not transform data

Use hdf5 as caffe input, error: HDF5Data does not transform data

我使用hdf5文件作为caffe输入数据,出现错误:

hdf5_data_layer.cpp:75] Check failed: !this->layer_param_.has_transform_param() HDF5Data does not transform data.

这是我的定义:

layer {
  name: "weight28"
  type: "HDF5Data"
  include { phase : TRAIN } 
  transform_param { scale: 0.00392156862745098 }
  hdf5_data_param {
    source: "/home/zhangyu/codes/unsupervised/data/weight28.h5"
    batch_size: 8
  }
  top: "weight28"
}

这是我的 h5 文件的一些信息:

HDF5 weight28.h5 
Group '/' 
    Dataset 'data' 
        Size:  2555000x28
        MaxSize:  Infx28
        Datatype:   H5T_IEEE_F64LE (double)
        ChunkSize:  28x28
        Filters:  none
        FillValue:  0.000000

我找到了 ,答案是 您不能在 hdf5data 层中使用转换参数。
caffe中的剂量数据转换做什么?我可以直接取消吗?

  1. 正如您已经发现的那样,您不能在 "HDF5Data" 层中包含 transformation_param - caffe 不支持此功能。

  2. 至于转换参数本身,看caffe.proto:

// For data pre-processing, we can do simple scaling and subtracting the
// data mean, if provided. Note that the mean subtraction is always carried
// out before scaling.
optional float scale = 1 [default = 1];

transform_param { scale: 0.00392156862745098 } 意味着您的网络希望您的输入按 0.0039.. (1/254) 缩放。
当您创建用于训练的 hdf5 数据文件时,您可以(并且可能应该)将数据缩放 1/254,然后从 "HDF5Data" 层中删除 transform_param

回应user6931072提到的错误Check failed: H5LTfind_dataset(file_id, dataset_name_) Failed to find HDF5 dataset:

您应该提供一个文本文件作为源,而不是 hdf5 文件。因此,创建一个列出 hdf5 文件的文本文件,而不是 source: "/home/zhangyu/codes/unsupervised/data/weight28.h5",然后使用 source: "/home/zhangyu/codes/unsupervised/data/myhdf5data.txt".