Caffe源码分析随笔(二)——Blob

Blob是caffe中每一层的基本类型。
查看头文件:

template <typename Dtype>
class Blob {
 public:
  Blob(): data_(), diff_(), count_(0), capacity_(0) {}
  ...
 protected:
  shared_ptr<SyncedMemory> data_;
  shared_ptr<SyncedMemory> diff_;
  shared_ptr<SyncedMemory> shape_data_;
  vector<int> shape_;
  int count_;
  int capacity_;

Blob类和caffe中大多类一样是模板函数, 其实Dtype在caffe中一般是float 或 double类型。 一般可以不用管它是float或是double类型,但我遇到过Dtype类型不匹配的情况,这个时候我目前只发现使用Dtype类型强制转换,将其他类型转为Dtype。

看Blob类下的几个变量。data_显然是这一层的数值张量(the data of this layer), diff_显然是相应的微分值。 至于shape_data_shape_ 应该都是layer的shape,一般是四维的。count_ 是这一层data总数, count_ = width*height*channel*num , capacity_则是当前申请的空间容纳的data数。

SyncedMemory 是caffe的一个基本类型,如上面代码:data,diff 都是SyncedMemory类型。

class SyncedMemory {
 private:
  void to_cpu();
  void to_gpu();
  void* cpu_ptr_;
  void* gpu_ptr_;
  size_t size_;
  SyncedHead head_;
  bool own_cpu_data_;
  bool cpu_malloc_use_cuda_;
  bool own_gpu_data_;
  int gpu_device_;
}

SyncedMemory类主要干的是 分配cpu数据, gpu数据, 数据从cpu传到gpu, 从gpu传到cpu之类的。注意到有void指针, void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值