链接:https://www.zhihu.com/question/53296707/answer/139641037
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
已经通过 使用HDF5Data做输入 ,加入slice layer,构建五个小分类器 解决了这个问题,效果也还可以。
!!!如果有小伙伴遇到了类似的问题,又无从下手的话,私信我,我把我的具体流程和代码告诉你。
----------------------------------------------------------------------------------------------------
发现有很多小伙伴都遇到了这个问题。。。作此补充。
1.HDF5文件的生成
参考这篇博客:caffe HDF5Data 层使用及数据生成
2.网络结构
参考这篇博客:Caffe中HDF5Data例子 - from_jiarenyf - 博客频道 - CSDN.NET
3.我的prototxt文件
到此下载:多分类caffe代码 - 下载频道 - CSDN.NET
-----------------------------------
基本框架,如下图所示。
有些时候,我们的输入不是标准的图像,而是其它一些格式,比如:频谱图、特征向量等等,这种情况下LMDB、Leveldb以及ImageData layer等就不好使了,这时候我们就需要一个新的输入接口——HDF5Data.
(1) 在Matlab中生成HDF5文件
这里直接以例子的形式说明如何生成:
问题:输入data是512*1的矢量,共1000个样本,label是标量。
代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
关于HDF5在MATLAB里面的的其它用法,比如从指定位置开始写等等,请参照MATLAB文档。
(2) caffe中HDF5层的用法
注意:由于单个HDF5文件大小有限制,MATLAB下好像最大只能生成5G大小的文件,因此当我们的训练数据较多的时候,往往需要将数据分别写入多个H5文件中。
下面直接给出caffe中HDF5Data-layer的使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
由于可能存在多个H5文件,所以HDF5Data的输入是从一个TXT文件读取的列表,train.txt内容示例如下:
- 1
- 2
- 3
还需要注意,shuffle是对H5文件进行乱序,而每个H5文件内部的顺序不动。