您的位置:首页 > Web前端

Caffe源码解析8: Net

2017-01-03 19:48 369 查看
Net在Caffe中代表一个完整的CNN模型,它包含若干个Layer实例。前面看到的各类prototxt的经典网络结构如LeNet、AlexNet等都是Caffe代码实现的一个Net对象。

1、Net基本用法

#include <caffe\net.hpp>

在main()中添加

std::string proto("deploy.prototxt");
Net<float> nn(proto, caffe::TEST);
vector<string> bn = nn.blob_names();  //获取Net中所有blob对象名
vector<string> ln = nn.layer_names();
for (int i = 0; i < bn.size(); i++)
{
cout << "Blob #" << i << ":" << bn[i] << endl;
}
for (int j = 0; j < ln.size(); j++)
{
cout << "Layer #" << j << ":" << ln[j] << endl;
}


F0103 13:36:44.474290  5904 cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0)  I0103 13:54:55.282647 13792 net.cpp:283] Network initialization done.
Blob #0:data
Blob #1:conv1
Blob #2:pool1
Blob #3:norm1
Blob #4:conv2
Blob #5:pool2
Blob #6:norm2
Blob #7:conv3
Blob #8:conv4
Blob #9:conv5
Blob #10:pool5
Blob #11:fc6
Blob #12:fc7
Blob #13:fc8
Blob #14:prob
Layer #0:data
Layer #1:conv1
Layer #2:relu1
Layer #3:pool1
Layer #4:norm1
Layer #5:conv2
Layer #6:relu2
Layer #7:pool2
Layer #8:norm2
Layer #9:conv3
Layer #10:relu3
Layer #11:conv4
Layer #12:relu4
Layer #13:conv5
Layer #14:relu5
Layer #15:pool5
Layer #16:fc6
Layer #17:relu6
Layer #18:drop6
Layer #19:fc7
Layer #20:relu7
Layer #21:drop7
Layer #22:fc8
Layer #23:prob

可见Net中既包含了Layer对象,又包括了Blob对象。其中Blob对象用于存放每个Layer输入/输出的中间结果,Layer则根据Net描述对指定的输入Blob进行某些计算处理(卷积、下采样。。。),输出结果也被放到Blob中。

同名的blob表示同一个blob对象,同名的layer表示同一个layer对象,而blob和layer同名则不代表他们之间有任何关系。

[title3]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: