caffe HDF5Data 層使用及資料生成

2021-07-25 21:34:20 字數 3292 閱讀 6618

參考文章:

有些時候,我們的輸入不是標準的影象,而是其它一些格式,比如:頻譜圖、特徵向量等等,這種情況下lmdb、leveldb以及imagedata layer等就不好使了,這時候我們就需要乙個新的輸入介面——hdf5data.

這裡直接以例子的形式說明如何生成:

1、手寫體的資料集

%讀完後,labels為乙個50000*1的陣列;

labels = loadmnistlabels('trainlabelsidx1ubyte');

% reshape images to 4d:

[rows,col,channel,numbers]

traindata=reshape(images,[28 28 1 size(images,2)]);

% permute to [cols,rows,channel,numbers]

traindata=permute(traindata,[2 1 3 4]);

% permute lables to [labels, number of labels ]

trainlabels=permute(labels,[2,1]);

% create database

%注意,這是的/data與/label表示檔案裡的dataset.當我們定義.proto檔案的網路時,一定要注意:top:分別也要為data和label.

h5create('train.hdf5','/data',size(traindata),'datatype','double');

h5create('train.hdf5','/label',size(trainlabels),'datatype','double');

h5write('train.hdf5','/data',traindata);

h5write('train.hdf5','/label',trainlabels);

% same for test data

生成檔案以後,可以通過h5disp(』檔名『)看看裡面的東西。下面是我自己生成的檔案裡的內容,不是上面生成的

哦;

>> h5disp('train.hdf5')

hdf5 train.hdf5

group '/'

dataset 'data'

size: 256x1x1x200

maxsize: 256x1x1x200

datatype: h5t_ieee_f64le (double)

chunksize:

filters: none

fillvalue: 0.000000

dataset 'label'

size: 1x200

maxsize: 1x200

datatype: h5t_ieee_f64le (double)

chunksize:

filters: none

fillvalue: 0.000000

檢視proto檔案中的內容

layer 

hdf5_data_param

注意:第一,再生成hdf5檔案時,一定要注意陣列的維度關係,很敏感的,如,把1*50000寫為了50000*1肯定會出錯

的。在caffe中,資料都是以4維出現的。(我記得python與matlab裡的維度是正反的,python與c語言中都是

rowmajor, matlab中是 columnmajor,

相應的就是, matlab是一組維度中,左邊的數字變化最快,,而

python中為右邊。好像是這樣的)

第二,生成的hdf5的dataset的名稱一定要與你後面定義的.proto檔案裡的data層的top:後面的名稱(即輸出的

名稱)一樣啊,要不出錯,找不到資料的)。

第三,在定義.proto檔案裡的data層時注意,hdf5_data_param的source不要直接寫我們生成的hdf5檔案的路

徑,而是寫乙個.txt檔案的,並在.txt檔案裡寫入你生成的hdf5檔案的路經,乙個hdf5檔案路徑佔一行,一定要

這樣哦。原因是因為,我們可以要讀入多個hdf5檔案,所以要這樣寫哦。

第四,生成的hdf5檔案一般都很大,如果是的話,可以很多的,hdf5data layer不能按照batch來從磁碟上

讀取資料,只能一次性把所有資料從h5檔案中讀到記憶體中,如果出錯了,很可以你的記憶體不夠了哦;

第五,hdf5data layer不支援預處理功能。

2 問題:輸入data是512*1的向量,共1000個樣本,label是標量。

**如下:

% 建立hdf5檔案,包含data和label兩個變數,資料型別是caffe支援的float型資料

h5create('train.h5','/data',[1

1512

1000],'datatype','single');

h5create('train.h5','/label',[111

1000],'datatype','single');

%reshape: width x height x channels x num,注意matlab讀資料是列優先,是和c++裡面相反的。所以寫資料的時候也要倒著寫。

train_data = reshape(train_data,[1

1512

1000]);

train_label = reshape(train_label,[111

1000]);

h5write('train.h5' ,'/data' , single(train_data));

h5write('train.h5' ,'/label', single(train_label));

關於hdf5在matlab裡面的的其它用法,比如從指定位置開始寫等等,請參照matlab文件。

注意:由於單個hdf5檔案大小有限制,matlab下好像最大只能生成5g大小的檔案,因此當我們的訓練資料較多的時候,往往需要將資料分別寫入多個h5檔案中。

下面直接給出caffe中hdf5data-layer的使用示例:

layer

hdf5_data_param

}

由於可能存在多個h5檔案,所以hdf5data的輸入是從乙個txt檔案讀取的列表,train.txt內容示例如下:

train1.h5

train2.h5

...

還需要注意,shuffle是對h5檔案進行亂序,而每個h5檔案內部的順序不動。

HTML5中的data 屬性

data 屬性包括兩部分 屬性名不應該包含任何大寫字母,並且在字首 data 之後必須有至少乙個字元 屬性值可以是任意字串 注釋 使用者 會完全忽略字首為 data 的自定義屬性。與jquery的.data 不是乙個概念。在獲取自定義屬性的值時,使用dataset屬性,然後通過自定義屬性 這時去掉d...

網路傳輸7層,4層,5層模型

一 7層 二 5層 5層只是osi和tcp ip的綜合,是業界產生出來的非官方協議模型,但是很多具體的應用。實際應用還是tcp ip的四層結構。為了方便可以把下兩層稱為網路介面層。五層體系結構包括 應用層 運輸層 網路層 資料鏈路層和物理層。5層模型不展開講解,內容和功能參照7層的,這裡把3者做乙個...

HTML5自定義data屬性

可能大家在使用jquery mobile時,經常會看到data role data theme等的使用,比如 通過如下 即可實現頁首的效果 通過手機瀏覽,效果如下 為什麼寫乙個data role header 就能實現底部為黑色 文字居中顯示的效果呢?我們寫乙個html頁面,自定義乙個data ch...