caffe windows編譯成功后,就可以開始進行測試了。如果還沒有編譯成功的,請參考:caffe windows 學習第一步:編譯和安裝(vs2012+win 64)
一般第一個測試都是建議對手寫字體minist進行識別。這個測試放在根目錄下的 .\examples\mnist\ 文件夾內。
1、下載數據。程序本身不帶測試數據,需要去下載,測試數據為leveldb格式。你可以直接雙擊運行“get_mnist_leveldb.bat” 這個腳本自動下載數據,但一般都不成功,可能里面的網址被牆了。你可以直接到此下載:http://pan.baidu.com/s/1hry1f4g
下載好后直接解壓,得到兩個文件夾(mnist-train-leveldb和mnist-test-leveldb),將這兩個文件夾直接復制到 .\examples\mnist\ 目錄下。
2、修改配置文件。該目錄下prototxt擴展名的都是配置文件。我們只需要修改lenet_solver.prototxt,用vs2012打開(也可以用記事本打開,但格式混亂,看不清楚),定位到最后一行:solver_mode: GPU,將GPU改為CPU。 如果你有GPU,這一步就可以免了。
3、運行。直接雙擊文件“train_lenet.bat”就開始運行了,很簡單吧。
但是原理是什么呢? 打開“train_lenet.bat”這個文件看看:
copy ..\\..\\bin\\MainCaller.exe ..\\..\\bin\\train_net.exe SET GLOG_logtostderr=1 "../../bin/train_net.exe" lenet_solver.prototxt pause
這個腳本程序其實很簡單,只有四行:
第一行:將根目錄下的bin文件夾里面的MainCaller.exe復制一份,並重命名為train_net.exe
第二行:設置glog日志。glog是google 出的一個C++輕量級日志庫,介紹請看 glog
第三行:運行train_net.exe,並帶一個參數lenet_solver.prototxt(即我們剛才修改的配置文件)
第四行:測試完后,暫停。
MainCaller.exe是整個程序的入口,由它來調用其它的測試。我們打開對應的MainCaller.cpp文件(examples目錄下),發現只有這么一行代碼:
#include "../../tools/train_net.cpp"
即是去調用執行train_net.cpp文件。
打開打tools下的train_net.cpp,熟悉的main函數就出來了
#include <cuda_runtime.h> #include <iostream> #include <cstring> #include "caffe/caffe.hpp" using namespace caffe; // NOLINT(build/namespaces) int main(int argc, char** argv) { ::google::InitGoogleLogging(argv[0]); //用第一個參數來初始化日志 ::google::SetLogDestination(0, "../tmp/"); //將日志放入/tmp/文件夾下 if (argc < 2 || argc > 3) { LOG(ERROR) << "Usage: train_net solver_proto_file [resume_point_file]"; return 1; } SolverParameter solver_param; //創建測試參數對象 ReadProtoFromTextFileOrDie(argv[1], &solver_param); //讀取具體的參數配置 LOG(INFO) << "Starting Optimization"; //打印日志信息 SGDSolver<float> solver(solver_param); //開始優化 //根據調用時,是否帶第三個參數,進行不同的測試 if (argc == 3) { LOG(INFO) << "Resuming from " << argv[2]; solver.Solve(argv[2]); } else { solver.Solve(); } LOG(INFO) << "Optimization Done."; //優化結束,打印日志信息 return 0; }
整個minist手寫數字識別過程需要迭代10000次,識別精度會有99%以上。
如果你只是想看看caffe是否編譯成功,不需要迭代那么多次,你可以修改lenet_solver.prototxt配置文件,定位到max_iter: 10000這一行,修改成你想要的迭代次數就行了。
我迭代1000次的結果如下:
屏幕上顯示的這些,都是打印的glog日志信息,從左至右大致是:日期 時間 執行文件] 執行信息