caffe 使用筆記

2021-07-10 09:57:37 字數 3847 閱讀 5433

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...