Caffe源码精读 - 2 - Caffe 之Blob(数据容器)

Class_3 Caffeblob(数据容器)

 

1. 概述

Blob是caffe中使用的一个数据容器,几乎每一个网络层都有自己的blob(继承自层基类layer的“vector<shared_ptr<Blob<Dtype> > > blobs_”)。

各层在前向传播和反向传播过程中,主要就是改变相应blob中的存储值。

2. 数据

Blob中保存SyncedMemory类型的数据,SyncedMemory数据是更底层的缓存形式,直接控制指针,在此不做细致讲解了。

Blob中的数据如下:

data_: 存储各层输入和输出数据、weights和bias等;

diff_: 存储梯度信息;

shape_: 是一个vector,存储的是数据的shape信息;

count_: Blob中存储的数据总数

capacity_: 当前Blob的容量,可以动态的控制增减;

3. 函数成员

1. ReShape()

ReShape都是用来控制数据的shape信息,主要是控制的shape_成员取值。

2. shape()

shape()成员是用来获取数据的shape信息,与ReShape是因果关系成员。

3. num_axes

num_axes函数比较有用,是为了获取当前数据的数据轴数量,就是shape数量。如caffe中数据通常以NCHW形式存在,那么num_axes一般表示数据的时候,取值就是4。

4. count

count主要是为了获取数据量。

count()有些是获取全部的数据量。

count(int start_axis, int end_axis)是获取指定起始轴和结束轴的数据量。

5. CanonicalAxisIndex

CanonicalAxisIndex是为了能够获取正向索引和反向索引,如轴索引为-1,则取倒数第一个轴,针对NCHW,就是去W这个轴并做进一步分析。

6. num(), channels(), height(), width()

分别获取数据的batch_size, 通道数,高,宽信息。

7. offst

offset是计算数据偏移量,遵循NCHW形式,偏移量计算公式为((n∗C+c)∗H+h)∗W+w。其中小写的n、c、h、w分别是batch_size, channel, height, width。

8. cpu_datagpu_data

是为了分别获取存储在cpu或者gpu缓存中的数据指针。

9. asum_data, asum_diff, sumsq_data, sumsq_diff

分别用于计算L1和L2信息。

       其他函数成员不做赘述,其实都还很好理解。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值