caffe學習系列之關於實驗的一些總結

2021-08-13 09:33:30 字數 1736 閱讀 7388

(最近導師急哄哄的讓10天之內趕出一篇**,就大大加快了實驗的力度,但是情急之下各種失誤不知道重頭再來了多少次。。)

本人做的實驗是關於表情分類識別的,下面一些機械試驗中的幾點總結。

1.關於卷積網路的輸入:

我試驗需要兩個網路的融合(某fc層特徵拼接),之前兩個子網路的訓練資料輸入格式分別為lmdb,hdf5,著急兩個網路融合後該怎麼一對一的輸入,最後採用hdf5的格式,hdf5格式的輸入支援多top,我實驗的hdf5結構為data1(64*64),data2(1*102),label;data1為subnet1的輸入,data2為subnet2的輸入;

(最開始實驗時,融合後的網路我依然用的兩種資料格式作為輸入,實驗也能跑的通,我覺得只要batchsize大小一致,資料也對應,應該也行得通;只不過我很難保證兩者輸入一一對應,所以又採用了上述格式的輸入)

3.關於用已有模型初始化網路引數

caffe是支援多模型初始化網路引數的,中間用逗號隔開,要初始化的引數層名要與caffemodel中名字相同:

#!/usr/bin/env sh

/home/hsm/project/facialexpress/caffe/build/tools/caffe train --solver /home/hsm/project/facialexpress/ensemble_net/fusion_solver.prototxt --weights /home/hsm/project/facialexpress/convnet1/res_train/1fold_net1_iter_8000.caffemodel,/home/hsm/project/facialexpress/convnet2/res_train_kfold_accu/1fold_accu_iter_30000.caffemodel --gpu 0

2>&1 | tee /home/hsm/project/facialexpress/ensemble_net/log/4fusion_nor_hdf.log

2.關於融合訓練過程中的一些現象:

1)出現很快accuracy不再上公升,loss值又很小的情況:

原因:訓練資料集太小;後來證明資料大多沒寫進去hdf5,導致實際輸入僅為預期的1/9;

2)accuracy為1,loss值正常情況;

說明網路訓練正常,但驗證資料精度的資料集與訓練集資料有重疊;

(我的資料集就比較小,但凡有重疊,驗證的accuracy就會極高)

caffe 下與loss相關的一些說明:

1 train loss 不斷下降,test loss 不斷下降,說明網路正在學習

2 train loss 不斷下降,test loss 趨於不變,說明網路過擬合

3 train loss 趨於不變,test loss 趨於不變,說明學習遇到瓶頸,需要減小學習率或者批處理大小

4 train loss 趨於不變,test loss 不斷下降,說明資料集100%有問題

5 train loss 不斷上公升,test loss 不斷上公升(最終變為nan),可能是網路結構設計不當,訓練超引數設定不當,程式bug等某個問題引起

6 train loss 不斷上下跳動,可能引起的原因:學習率過大,或者批處理大小太小

3.關於檔案管理

隨著實驗的進行,會需要很多次不同的輸入data,網路檔案prototxt,也會產生不同的輸出,比如log檔案、caffemodel檔案等,以後盡量用體現本次試驗個性及功能的單詞命名,各檔名要盡量一致,避免事後難以將系列檔案對上號(頭大);

Caffe 學習系列

學習列表 google protocol buffer在windows下的編譯 caffe windows 學習第一步 編譯和安裝 vs2012 win 64 caffe windows學習 第乙個測試程式 caffe學習系列 1 安裝配置ubuntu14.04 cuda7.5 caffe cudn...

caffe系列之啟用函式

1 sigmoid layer 2 relu retified linear and leaky relu 可選引數 negative slope 預設為0。對標準的relu函式進行變化,如果設定了這個值,那麼資料為負數時,就不再設定為0,而是原始資料乘以negative slope。layer r...

caffe學習系列 層解讀

層型別 accuracy layer 可以看到,caffe中計算accuracy時,是通過比較最後乙個全連線層 神經元個數 類別數 但沒有加入activation function 的輸出和資料集的labels來得到的,計算過程在accuracylayer中實現 我也一直非常困惑,計算accurac...