net在caffe中代表一个完整的cnn模型,包含若干layer实例。
net是一张图纸,对应的是protoBuffer文本文件,描述文件*.prototxt,
1. 现在用自带的caffeNet模型描述文件,位于/caffe-master/models/bvlc_reference_caffenet/deploy.prototxt,
将此文件拷贝到当前工作目录下
2 在caffe根目录下编写net_demo.cpp如下:
#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;
}
vector<string> cn=nn.layer_names();
for(int i=0;i<cn.size();i++)
{
cout<<"Layer #"<<i<<" : "<<cn[i]<<endl;
}
return 0;
}
3 编译:
g++ -o netapp net_demo.cpp -I/home/hk/Documents/caffe-master/include -D CPU_ONLY -I/home/hk/Documents/caffe-master/./build_rease/src/ -L/home/hk/Documents/caffe-master/build/lib -lcaffe -lglog -lboost_system -lprotobuf
出错:
在github找到答案网址 https://github.com/NVIDIA/DIGITS/issues/105
$ protoc src/caffe/proto/caffe.proto --cpp_out=.
$ mkdir include/caffe/proto
$ mv src/caffe/proto/caffe.pb.h include/caffe/proto
上面代码在先用caffe.proto生在src/caffe/proto目录下生成caffe.pb 和caffe.pb.h 然后在 include/caffe目录下新建proto, 然后把src/caffe/proto目录下caffe.pb.h移动进include/caffe/proto去
4 运行
./netapp
在一篇博客里看到一种方法(找不到连接了,哎,被他带坑了好像,不用编译cmake也行):
其实找不到libcaffe.so.1.0.0-rc3主要原因在于使用了make进行编译,使得caffe的python接口只能在这个目录下面才能找得到这个库.解决办法是使用cmake进行编译:
cd caffe-master
mkdir build
cd build
cmake ..
第一次用cmake编译,体验不同:
比make快,但是make pycaffe慢一点,
看着很担心像要出错的样子:
还好成功生成。
用 sudo ldconfig /home/hk/Documents/caffe-master/build/lib
不报错了!!
当然,好像有一个更安全的方式:
export LD_LIBRARY_PATH=/home/hk/Documents/caffe-master/build/lib/:$LD_LIBRARY_PATH
./netapp
结果:对应deploy.prototxt可以看到Blob和layer数目
从下面的图看出,blob对象用于存放每个layer输入/输出中间结果,layer则根据Net描述对指定的输入输出Blob进行某些计算处理(卷积,下采样,全连接,非线性变化,计算代价函数等),输出结果放到对应的Blob。
输入Blob和输出Blob可能是同一个,同名的Blob表示同一个Blob对象,同名的layer表示同一个layer对象,而Blob和layer同名没有直接关系