caffe代码学习--Blob

来源:互联网 发布:pr怎么做淘宝视频 编辑:程序博客网 时间:2024/06/07 10:25

在caffe/src/caffe/中的blob.cpp文件和在caffe/include/caffe/中的blob.hpp文件分别对应于blob的实现文件及其头文件

data_:表示网络各层的输入和输出;diff_:表示代价函数相对于各层参数的梯度;shape_中主要存储4个变量:num表示数量;channels表示对应层的通道;height和width就表示单个数据的尺寸;count_:表示这个Blob里已经存储的元素的个数;capacity_:表示这个Blob的容量。


一、定义三个Reshape函数,分别对应的作用是(1)读取blob的num,channels,width,height;(2)计算blob的count,即为num*channels*width*height,如果count大于blob本身的容量(capacity),进行reset处理;(3)定义一个与shape有相同维度的向量,并把shape的对应维度赋值给新的向量

二、是ReshapeLike函数,定义一个新的blob,与原来的一样,命名为othera

三、对blob的简单初始化操作

四、blob结构体中的data和diff的数据指针操作,有cpu和gpu两种,同时还有限制不能对返回的指针指向内容进行修改和可以对返回的指针指向内容进行修改两种类型,即是const和mutable这两种情况

五、sharedata和sharediff表示可以让其他blob的data和diff和当前的Blob进行共享

六、blob的更新,主要有三种情况,HEAD_AT_CPU;HEAD_AT_GPU;SYNCED,并对每种情况单独解释说明,最终的目的都是减去diff的值,计算公式为data=-1 * diff + data

七、CopyFrom表示从source文件中拷贝数据,copy_diff表示的从data还是diff中拷贝,是一个bool型的变量

八、FromProto表示的是从proto中将文件数据读取进来

九、ToProto表示将文件数据保存到proto中

而blob中的SyncedMemory主要就是在gpu或者cpu上分配数据内存

其中blob中的主要函数为如下图所示: