caffe中的輸入資料格式為:高效資料庫(leveldb、lmdb)、記憶體、磁碟檔案(hdf5、影象)。對輸入資料的處理包括mean subtraction, scaling, random cropping, and mirroring,可以在transformationparameters中設定。
需要opencv,所以makefile.config檔案中的use_opencv=1
目標函式,即損失函式,首先包含損失函式的選取涉及的引數;損失函式一般由兩項組成,一項是loss term,另外一項是regularization term。前一項涉及的引數有;後一項涉及的引數有權重衰減(weight_decay)
優化方法:caffe中為梯度下降,首先是梯度下降演算法的選取涉及的引數,然後是每種引數更新方法涉及的引數,主要是梯度相關(動量momentum)、學習率(lr、lr_policy)。
以lenet為例,在solver.prototxt中
test_iter:
100#測試批次,如果測試資料層的batch_size=10,那麼可以覆蓋10*100=1000個測試樣本。
test_interval:
1000
#訓練每迭代1000次測試一遍網路,一次迭代是指一次前向傳播和一次後項傳播。
max_iter:4000
#最大的迭代次數
display:
100#每迭代100次在終端輸出一次loss值,比如iteration 4800, loss = 0.0120839
snapshot:
1000
#每迭代訓練1000次輸出一次中間結果,比如lenet_iter_1000.caffemodel lenet_iter_2000.solverstate
注:通常乙個epoch指覆蓋所有訓練樣本,如果總共64000個訓練樣本,batch_size=64(即每批輸入64個樣本),那麼乙個epoch包含64000/64=1000次迭代(iteration)
1.test score #0 、test score #1分別表示準確度(accuracy)和損失函式(loss)
2.訓練mnist_autoencoder.prototxt模型時,輸出
train net output #0: cross_entropy_loss = 61.1311 (* 1 = 61.1311 loss)
train net output #1: l2_error = 2.05479
其中,l2_error
表示 euclideanloss,在模型mnist_autoencoder.prototxt中定義,在這裡可以直接刪除而不影響模型訓練,因為自動編碼器不需要標籤。
1.caffe預設的日誌在 /tmp, 預設名字為"[program name].[hostname].[user name].log.[severity level].[date].[time].[pid]" (e.g.caffe.host.user.log.info.20150207-193541.13458)
可以更改日誌目錄
--log_dir=$pathwhereyouwantlogat
2.動態顯示日誌更新情況
tail -n
20-f mylog.txt
該階段需要deploy.prototxt檔案和相應訓練階段產生的.prototxt檔案
需要將libcaffe.so檔案包含在g++可以找到的位置,然後使用g++ -lcaffe read.cpp命令編譯,讀取.caffemodel的c++源**示例如下。
#include
#include
#include
#include
#include "caffe.pb.h"
using
namespace
std;
using
namespace caffe;
int main(int argc, char* argv)
printf("repeated size = %d\n", msg.layer_size());
::google::protobuf::repeatedptrfield< layerparameter >* layer = msg.mutable_layer();
::google::protobuf::repeatedptrfield< layerparameter >::iterator it = layer->begin();
for (; it != layer->end(); ++it)
編譯後執行./a.out 輸出
repeated
size = 9
data
:batch_size-:64
blobs_size:
0conv1 convolution
1blobs_size:
2 blobs(0)0x1f3f8f8
conv2 convolution
1blobs_size:
2 blobs(0)0x1f3f8f8
ip1 innerproduct
1blobs_size:
2 blobs(0)0x1f3f8f8
ip2 innerproduct
1blobs_size:
2 blobs(0)0x1f3f8f8
pycaffe是caffe的python api,其安裝步驟如下:
首先要回到caffe主目錄下caffe-master,編譯pycaffe(這一步的前提是caffe已經成功安裝):
make pycaffe
make distribute
設定環境變數:
pythonpath=/home/user/caffe-master/distribute/python:$pythonpath
ld_library_path=home/user/caffe-master/build/lib:$ld_library_path
啟動python並匯入caffe
>>>
import caffe
如果出現from google.protobuf import descriptor_pb2 importerror: cannot import name descriptor_pb2
之類的錯誤首先保證descriptor_pb2.py
檔案存在,並且該檔案所在的目錄包含在pythonpath目錄中或sys.path中。
loss=nan#學習率過大
迭代很多次,但loss 幾乎不變
顯示
i0903 13:46
:54.967397 22723 layer_factory
.hpp
:75] creating
layer
data
i0903 13:46
:54.967449 22723 net
.cpp
:99] creating
layer
data
i0903 13:46
:54.967455 22723 net
.cpp
:409] data
-> data
(掛在這裡不動了)
原因和解決方案見這裡
1.
caffe的python介面使用筆記
網路初始化 model def d caffe caffe master models bvlc reference caffenet deploy.prototxt model pretrained d caffe caffe master models bvlc reference caffen...
Vim 使用筆記
set hlsearch set nohlsearch 搜尋後清除上次的加亮 nohl nohlsearch 拷貝 很有用的一句話,規定了格式選項,讓它換行不自動空格 set formatoptions tcrqn set fo r set noautoindent 再 shift insert 正...
xemacs使用筆記
xemacs使用筆記 xemacs emacs的下一代,由lucid原創 from debian參考手冊.由於不知道什麼時候刪掉了emacs的乙個重要檔案.每次都沒法安裝好.突然發現了xemacs,於是決定使用看看.本人還是菜鳥,僅供交流 我使用的ubuntu系統,所以就直接apt get inst...