參考文章:
有些時候,我們的輸入不是標準的影象,而是其它一些格式,比如:頻譜圖、特徵向量等等,這種情況下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...