我使用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层中使用transform param。
caffe中的数据转换是做什么用的?我可以直接取消它吗?
回答:
-
正如你自己已经发现的,你不能在
"HDF5Data"
层中使用transformation_param
– caffe不支持这样做。 -
关于转换参数本身,请查看
caffe.proto
:
// 对于数据预处理,我们可以进行简单的缩放和减去数据均值,如果提供了的话。请注意,均值减去总是先于缩放进行。optional float scale = 1 [default = 1];
使用transform_param { scale: 0.00392156862745098 }
意味着你的网络期望你的输入被0.0039..
(1/254)缩放。
你可以(并且可能应该)在创建用于训练的hdf5数据文件时将其缩放1/254,然后从"HDF5Data"
层中移除transform_param
。