编写程序测试caffe的Blob和Net的功能
2016/9/1
Blob测试
1 cd caffe/
2 sudo gedit blob_demo.cpp
3 在gedit编辑器中编辑
#include <vector>
#include <iostream>
#include <caffe/blob.hpp>
using namespace caffe;
using namespace std;
int main(){
Blob<float> a;
cout<<"Size: "<<a.shape_string()<<endl;
a.Reshape(1,2,3,4);
cout<<"Size: "<<a.shape_string()<<endl;
float *p=a.mutable_cpu_data();
for(int i=0;i<a.count();i++){
p[i]=i;
}
for(int u=0;u<a.num();u++){
for(int v=0;v<a.channels();v++){
for(int w=0;w<a.height();w++){
for(int x=0;x<a.width();x++){
cout<<"a["<<u<<"]["<<w<<"]["<<x<<"]="<<a.data_at(u,v,w,x)<<endl;
}
}
}
}
return 0;
}
4 编译:
g++ -o app blob_demo.cpp -I $CAFFE_ROOT/include/ -D CPU_ONLY -I $CAFFE_ROOT/.build_release/src/ -L $CAFFE_ROOT/build/lib/ -lcaffe -lglog -lboost_system -lprotobuf
5 运行:
./app
运行结果:
Net测试
1 cd caffe/
2 sudo gedit net_demo.cpp
3 在gedit编辑器中编辑
#include <vector>
#include <iostream>
#include <caffe/net.hpp>
using namespace caffe;
using namespace std;
int main(void){
std::string proto("deploy.prototxt");
Net<float> nn(proto,caffe::TEST);
vector<string> bn=nn.blob_names();
for(int i=0;i<bn.size();i++){
cout<<"Blob #"<<i<<" : "<<bn[i]<<endl;
}
return 0;
}
4 编译
g++ -o netapp net_demo.cpp -I $CAFFE_ROOT/include/ -D CPU_ONLY -I $CAFFE_ROOT/.build_release/src/ -L $CAFFE_ROOT/build/lib/ -lcaffe -lglog -lboost_system -lprotobuf
5 运行
./netapp
此处遇到一个问题:
原来是照猫画虎却不仔细,没有把deploy.prototxt复制到当前文件目录中,将$CAFFE_ROOT/models/bvls_reference_caffenet/deploy.prototxt复制过来,就能成功运行了。
运行结果:
运行打印出了很多东西,可以看出是一系列Blob和Layer的信息。
排疑
之前在编译的时候还遇到一个错误:
libcaffe.so.1.0.0-rc3: cannot open shared object file: No such file or directory
发现是caffe库没有链入。
解决办法:
在终端输入:
sudo gedit /etc/profile
在下面加入
export LD_LIBRARY_PATH=$CAFFE_ROOT/build/lib:$LD_LIBRARY_PATH
回到终端,更新环境变量:
source /etc/profile