使用 hdf5 作为 caffe 输入,错误:HDF5Data 不转换数据
Posted
技术标签:
【中文标题】使用 hdf5 作为 caffe 输入,错误:HDF5Data 不转换数据【英文标题】:Use hdf5 as caffe input, error: HDF5Data does not transform data 【发布时间】:2017-02-22 15:27:51 【问题描述】:我使用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
我找到了similar question,答案是 你不能在 hdf5data 层中使用转换参数。 caffe 中的剂量数据转换有什么作用?我可以取消吗?
【问题讨论】:
【参考方案1】:针对user6931072Check failed: H5LTfind_dataset(file_id, dataset_name_) Failed to find HDF5 dataset
提到的错误:
您应该提供一个文本文件作为源文件,而不是 hdf5 文件。因此,不要使用source: "/home/zhangyu/codes/unsupervised/data/weight28.h5"
,而是创建一个列出hdf5 文件的文本文件,然后使用source: "/home/zhangyu/codes/unsupervised/data/myhdf5data.txt"
。
【讨论】:
【参考方案2】:正如您已经发现的那样,您不能在 "HDF5Data"
层中包含 transformation_param
- caffe 不支持这一点。
至于变换参数本身,看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 数据文件然后从 "HDF5Data"
层中删除 transform_param
时,您可以(并且可能应该)将数据缩放 1/254。
【讨论】:
非常感谢,我删除了 transform 参数并解决了这个问题。但它又出现了这个错误:Check failed: H5LTfind_dataset(file_id, dataset_name_) Failed to find HDF5 dataset
。我准备 hdf5 文件有问题吗?我打算准备一个 91250x28x28 的数据集,它与 leveldb 中定义的其他数据一起被馈送到网络。 @Shai
@user6931072 对我来说听起来像是一个新问题。从错误消息看来,caffe 找不到文件。以上是关于使用 hdf5 作为 caffe 输入,错误:HDF5Data 不转换数据的主要内容,如果未能解决你的问题,请参考以下文章