caffe源码分析:blob.hpp分析

文件路径:caffe-master_github/include/caffe/
如果想对blob有详细了解,参考Caffe官网教程:http://caffe.berkeleyvision.org/tutorial/net_layer_blob.html


以下摘自互联网:
Blob作为Caffe的四大模块之一,负责完成CPU/GPU存储申请、同步和数据持久化映射。Caffe内部数据存储和通讯都是通过Blob来完成,Blob提供统一的存储操作接口,可用来保存训练数据、模型参数等。Blob是一个高维连续数组,批处理图像数据时通常使用4维Blob,Blob的维度可以表示为(N, K, H, W),每个维度的意思分别是:

  • N: 数据的个数,例如SGD时一次mini-batch的图像个数。
  • K: 如果是图像,可以理解为通道数量;如果是网络中间结果,就是feature map的数量。
  • H, W: 如果是图像数据,可以理解为图像的高度和宽度;如果是参数数据,可以理解为滤波核的高度和宽度。

Caffe中通常只使用4维Blob完成图像应用,但是Blob完全可以合理地被用来存储任何数据,比如说学习到的参数。
例如:

  • 1000幅640*480 RGBD图像数据,其Blob形状为(1000, 4, 480, 640)。
  • 96个大小11*11的滤波核,处理16通道的输入数据,其参数Blob的形状为(96,16,11,11)。
  • 1000个输出,1024个输入的全连接层,其参数Blob的形状为(1000,1024)。

blob.hpp:
数据成员:

protectedshared_ptr<SyncedMemory> data_; //存放数据 
shared_ptr<SyncedMemory> diff_; //存放梯度
shared_ptr<SyncedMemory> shape_data_; 
vector<int> shape_;//shape_是Blob维度参数 
int count_;//count表示Blob存储的元素个数(shape_所有元素乘积) 
int capacity_;//capacity_表示当前Blob的元素个数(控制动态分配)

构造函数:
默认构造函数完成最基本的初始化,两个显示构造函数会调用Reshape函数完成data_和diff_的共享内存对象SyncedMemory的申请。

const Dtype* cpu_data() const; //cpu使用的数据
void set_cpu_data(Dtype* data); //用数据块的值来blob里面的data
const int* gpu_shape() const;
const Dtype* gpu_data() const; //返回不可更改的指针,下同
const Dtype* cpu_diff() const;
const Dtype* gpu_diff() const;
Dtype* mutable_cpu_data(); //返回可更改的指针,下同
Dtype* mutable_gpu_data();
Dtype* mutable_cpu_diff();
Dtype* mutable_gpu_diff();

总之,带mutable_开头的意味着可以对返回的指针内容进行更改,而不带mutable_开头的返回const 指针,不能对其指针的内容进行修改
Reshape函数:

void Reshape(const vector<int>& shape);//主要完成数据成员shape_,shape_data_,count_,capacity_,data_,diff_最基本的初始化工作,主要包括内存分配,含初始化。
void Reshape(const BlobShape& shape);//特别是完成data_,diff_的共享内存对象SyncedMemory的申请。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值