caffe源码学习:Blobs
caffe 的blob是caffe框架的核心,主要是由number*channel*weight*high组成的一个四维的tensor。首先是blob.hp定义的头文件。
上图表示的是blob的两个构造函数,现版本的caffe第一个已经过时。
上图表示的是reshape函数,这个函数主要是在调用Layer::Reshape或者 Layer::Forward函数的时候被触发用来改变blob的维度,以适应当前的计算。
上面的四个函数首先介绍的CanonicalAxisIndex函数,这个函数主要是对输入的维度进行变化,他允许输入的维度是负数,在做过输入检查之后,然后在判断如果axis小于0的话,加上num_axes( )就可以。num_axes( )返回blob元的维度。count( ) 主要是返回blob中元素的个数,例如fc曾有4096个神经元,另外coun还有两个版本,只不过参数不同,是按照维度进行索引。inline int count(int start_axis) const和inline int count(int start_axis, int end_axis) const。
计算在四维的tensor中给定元素位置取出对应的数值。
上图主要是blob之间数据的拷贝copy_diff为true表示拷贝的是梯度,否则拷贝的是data。reshape为true,表示可以直接转换为其他形状的blob,否则必须经过pre-reshape。红色箭头表示拷贝不同的内容。
上面就是简单书取出数据。后面的一些方法的具体实现实在CPP中。