caffe 卷积神经网络源码一些模糊点整理
2016-05-13 15:36
465 查看
最近在看caffe,本着 我啥也不会,别人啥都会的精神,虚心的看了好多博客,现对一些迷糊的点做一个总结,万一你也迷糊呢,是吧~
主要参考:http://blog.csdn.net/mounty_fsc/article/details/51085654
1 blob
blob类里面的 data_,diff_,count_,capacity_啥意思大家都懂,主要不懂的是它的shape_;
一般都会说shape是维度信息,但这个维度到底是啥?
a.
一般的图像数据,shape为4,分别是num,channels,height,width,这里,num=batch_size,channels=特征维度(RGB=3),blob的 维度(n*k*h*w)
k=channels,blob是row-major保存的(一行一行的),所以(n,k,h,w)位置的物理地址为((n*K+k)*H+h)*W+w.
b.
对于全连接网络,使用2D blobs (shape (N, D)),然后调用InnerProductLayer
c.
对于参数,维度根据该层的类型和配置来确定。对于有3个输入96个输出的卷积层,Filter核 11 x 11,则blob为96 x 3 x 11 x 11. 对于全连接层,1000个输出,1024个输入,则blob为1000 x 1024.
2 layer
Setup:Layer的初始化
Forward:前向传导计算,根据bottom计算top,调用了Forward_cpu(必须实现)和Forward_gpu(可选,若未实现,则调用cpu的)
Backward:反向传导计算,根据top计算bottom的梯度,其他同上
3 net
Init中,通过创建blob和layer搭建了整个网络框架,以及调用各层的SetUp函数。
blobs_存放这每一层产生的blobls的中间结果,bottom_vecs_存放每一层的bottom blobs,top_vecs_存放每一层的top blobs
注意这些参数的类型
最后再说一下ACCURACY layer
主要变量:
label_axis_为标签对应的轴(对应的blob中的那个维度)
outer_num_总的来说是样本数量,详细解释见后面
inner_num_同上,总的来说是样本数量,详细解释见后面
top_k为取前k个最高评分(的预测标签)
定义中关于axis的说明:
axis指出在预测blob中,哪一维是label轴,如(N x C x H x W)的blob,axis=0,则N为label对应的维度。axis=1,则C为label对应的维度,而剩下的N为outer样本数量, H x W为inner样本数量。
由代码可知,当
一般的,label blob的维度为(N x C),N为样本数量,C为标签数量(即类别个数)。axis=1,outer_num_=N,inner_num_=shape[2,2)=1(即没有inner)
主要参考:http://blog.csdn.net/mounty_fsc/article/details/51085654
1 blob
blob类里面的 data_,diff_,count_,capacity_啥意思大家都懂,主要不懂的是它的shape_;
一般都会说shape是维度信息,但这个维度到底是啥?
a.
一般的图像数据,shape为4,分别是num,channels,height,width,这里,num=batch_size,channels=特征维度(RGB=3),blob的 维度(n*k*h*w)
k=channels,blob是row-major保存的(一行一行的),所以(n,k,h,w)位置的物理地址为((n*K+k)*H+h)*W+w.
b.
对于全连接网络,使用2D blobs (shape (N, D)),然后调用InnerProductLayer
c.
对于参数,维度根据该层的类型和配置来确定。对于有3个输入96个输出的卷积层,Filter核 11 x 11,则blob为96 x 3 x 11 x 11. 对于全连接层,1000个输出,1024个输入,则blob为1000 x 1024.
2 layer
Setup:Layer的初始化
Forward:前向传导计算,根据bottom计算top,调用了Forward_cpu(必须实现)和Forward_gpu(可选,若未实现,则调用cpu的)
Backward:反向传导计算,根据top计算bottom的梯度,其他同上
3 net
Init中,通过创建blob和layer搭建了整个网络框架,以及调用各层的SetUp函数。
blobs_存放这每一层产生的blobls的中间结果,bottom_vecs_存放每一层的bottom blobs,top_vecs_存放每一层的top blobs
<pre name="code" class="cpp">protected: ... /// @brief The network name string name_; /// @brief The phase: TRAIN or TEST Phase phase_; /// @brief Individual layers in the net vector<shared_ptr<Layer<Dtype> > > layers_; /// @brief the blobs storing intermediate results between the layer. vector<shared_ptr<Blob<Dtype> > > blobs_; vector<vector<Blob<Dtype>*> > bottom_vecs_; vector<vector<Blob<Dtype>*> > top_vecs_; ... /// The root net that actually holds the shared layers in data parallelism const Net* const root_net_;
注意这些参数的类型
最后再说一下ACCURACY layer
Accuracy Layer
Accuracy完成的任务是统计预测正确样本的个数信息。如总样本N个,正确分类n个,正确率为n/N。主要变量:
label_axis_为标签对应的轴(对应的blob中的那个维度)
outer_num_总的来说是样本数量,详细解释见后面
inner_num_同上,总的来说是样本数量,详细解释见后面
top_k为取前k个最高评分(的预测标签)
定义中关于axis的说明:
axis指出在预测blob中,哪一维是label轴,如(N x C x H x W)的blob,axis=0,则N为label对应的维度。axis=1,则C为label对应的维度,而剩下的N为outer样本数量, H x W为inner样本数量。
由代码可知,当
axis=k时
outer_num_=blob.shape[0,..,k),inner_num_=blob.shape[k+1,..,shape.size)。
一般的,label blob的维度为(N x C),N为样本数量,C为标签数量(即类别个数)。axis=1,outer_num_=N,inner_num_=shape[2,2)=1(即没有inner)
<code class="language-c hljs has-numbering">outer_num_ = bottom[<span class="hljs-number">0</span>]->count(<span class="hljs-number">0</span>, label_axis_); inner_num_ = bottom[<span class="hljs-number">0</span>]->count(label_axis_ + <span class="hljs-number">1</span>);</code>
相关文章推荐
- HttpServletrequest 与HttpServletResponse总结
- Android开发本地及网络Mp3音乐播放器(十八)新下载歌曲加载准备SdcardSearchToList
- Android开发本地及网络Mp3音乐播放器(十八)新下载歌曲加载准备SdcardSearchToList
- java调用http请求json
- RxJava,Retrofit,OkHttp3结合使用
- apache httpcompontens之HttpAsyncClient使用
- JavaWeb开发之HttpServletResponse接口和常用方法 (跟着龙哥学JavaWeb)
- Volley的Https请求
- linux svn https检出错误
- 常见HTTP请求错误
- HttpServletRequest getHeader("x-forwarded-for")获取真实客户端IP
- 网络拓扑结构
- android-async-http框架库使用基础
- android开源框架android-async-http使用
- 论Android网络请求库——android-async-http
- android-async-http开源项目介绍及使用方法
- OkHttp使用指南
- Unity3D 游戏引擎之C#使用Socket与HTTP连接服务器传输数据包
- android studio单元测试 无法进入网络请求的回调
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse