Caffe中的工具之Caffe

2021-07-14 16:18:15 字數 1498 閱讀 7719

簡介:

caffe的tools目錄下提供了乙個caffe.cpp,經過編譯工具的編譯會生成乙個命令列工具caffe。該工具提供的功能有: train, test,  device_query, time。

訓練的方法:

這裡先分析train的功能,也就是訓練。訓練既支援從零開始訓練,也支援在已有的模型基礎上進行finetune。

finetune的命令列格式:caffe train --solver=solver.prototxt --model=model.ptototxt --weights=weights.caffemodel

其中通過--solver設定solver的prototxt檔案

通過--model設定網路的prototxt檔案

通過--weights設定乙個訓練好的網路,訓練時會用該網路的引數對待訓練的網路的引數進行初始化

int train()

else

} vectorgpus;

get_gpus(&gpus);

if (gpus.size() == 0) else

log(info) << "using gpus " << s.str();

#ifndef cpu_only

cudadeviceprop device_prop;

for (int i = 0; i < gpus.size(); ++i)

#endif

solver_param.set_device_id(gpus[0]);

caffe::setdevice(gpus[0]);

caffe::set_mode(caffe::gpu);

caffe::set_solver_count(gpus.size());

} caffe::signalhandler signal_handler(

getrequestedaction(flags_sigint_effect),

getrequestedaction(flags_sighup_effect));

// 用讀取的solverparameter建立solver

shared_ptr>

solver(caffe::solverregistry::createsolver(solver_param));

solver->setactionfunction(signal_handler.getactionfunction());

// 利用snapshot restore網路或利用weights初始化網路的引數

if (flags_snapshot.size()) else if (flags_weights.size())

// 進行訓練

if (gpus.size() > 1) else

log(info) << "optimization done.";

return 0;

}

caffe中的normalization實現

首先得感謝某牛的 如何在caffe中增加layer以及caffe中triplet loss layer的實現 所以接下來就按照這個牛的介紹,逐個往裡面新增東西就好了。構造設定函式這裡就先忽略,直接進入前饋和反饋的實現。前饋的過程相對來說是比較簡單的,如下 template void normaliz...

caffe中的卷積

如上,將三維的操作轉換到二維上面去做,然後呼叫gemm庫進行矩陣間的運算得到最後結果。兩個矩陣相乘,需要中間的那個維度相同,這個相同的維度就是c k k,其中c是feature map的維度,k為卷積核的邊長。按照卷積核在feature map上面滑窗的順序將其展開成二維的。在三維上面看,就是卷積核...

Caffe之網路輸出

1 fc層 例如caffenet的fc8層 plain view plain copy layer param inner product param bias filler 最後乙個全連線層 神經元個數 類別數,輸出值位於區間 並不是概率值,輸出數值最大的值的index就是樣本的 類別 2 acc...