caffe blob

blob.h

#ifndef CAFFE_BLOB_HPP_
#define CAFFE_BLOB_HPP_

#include <algorithm>
#include <string>
#include <vector>

#include "caffe/common.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/syncedmem.hpp"

const int kMaxBlobAxes = 32;

namespace caffe {

template <typename Dtype>
class Blob {
 public:
  Blob()
       : data_(), diff_(), count_(0), capacity_(0) {}


//初始化shape_ 和shape_data_里的cpu_ptr
  explicit Blob(const int num, const int channels, const int height,const int width);
  explicit Blob(const vector<int>& shape);

  ///改变数据维度,shape_ shape_data_
  void Reshape(const int num, const int channels, const int height,
      const int width);
  void Reshape(const vector<int>& shape);
  void Reshape(const BlobShape& shape);
  void ReshapeLike(const Blob& other);
  
  inline string shape_string() //打印数据维度
  inline const vector<int>& shape() //返回数据shape_
  inline int shape(int index)//返回某一维的维度
  inline int num_axes() const //返回一共有多少维
  inline int count() const { return count_; }
 
  inline int count(int start_axis, int end_axis) const //返回从start_axis到end_axis之间的数据个数

  inline int count(int start_axis) const//返回从start_axis维开始的数据个数

  inline int CanonicalAxisIndex(int axis_index) const //支持负数索引
  

  inline int num() const { return LegacyShape(0); }.
  inline int channels() const { return LegacyShape(1); }
  inline int height() const { return LegacyShape(2); }
  inline int width() const { return LegacyShape(3); }
  inline int LegacyShape(int index) const //返回维度<=4的数据的某个维度的数据个数

  inline int offset(const int n, const int c = 0, const int h = 0,const int w = 0) const //返回数据偏移

  inline int offset(const vector<int>& indices) const //返回数据偏移
 
  void CopyFrom(const Blob<Dtype>& source, bool copy_diff = false,bool reshape = false);

  inline Dtype data_at(const int n, const int c, const int h,const int w) const //返回data数据所在的内存地址

  inline Dtype diff_at(const int n, const int c, const int h,const int w) const//返回diff数据所在的内存地址

  inline Dtype data_at(const vector<int>& index) const //返回data数据所在的内存地址
  inline Dtype diff_at(const vector<int>& index) const//返回diff数据所在的内存地址

  inline const shared_ptr<SyncedMemory>& data() const //返回data_

  inline const shared_ptr<SyncedMemory>& diff() const //返回diff_

  const Dtype* cpu_data() const;//获取_cpu_ptr_
  void set_cpu_data(Dtype* data);//设置data_的cpu_ptr_
  const int* gpu_shape() const;//获取shape_data_的gpu_ptr_
  const Dtype* gpu_data() const;
  void set_gpu_data(Dtype* data);
  const Dtype* cpu_diff() const;
  const Dtype* gpu_diff() const;
  Dtype* mutable_cpu_data();//获取_cpu_ptr_ 并更新head_
  Dtype* mutable_gpu_data();//获取_gpu_ptr_ 并更新head_
  Dtype* mutable_cpu_diff();
  Dtype* mutable_gpu_diff();
  void Update();
  void FromProto(const BlobProto& proto, bool reshape = true);//从proto读取_data,_diff
  void ToProto(BlobProto* proto, bool write_diff = false) const;//将_data,_diff写入proto
  Dtype asum_data() const;//sum(|_data[i|) L1 norm
  Dtype asum_diff() const;//sum(|_diff[i]|) L1 norm
  Dtype sumsq_data() const;//sum(_data[i]^2) L2 norm
  Dtype sumsq_diff() const;//sum(_diff[i]^2) L2 norm
  void scale_data(Dtype scale_factor);//data_*scale_factor
  void scale_diff(Dtype scale_factor);//diff_*scale_factor
  void ShareData(const Blob& other);//更新data_
  void ShareDiff(const Blob& other);//更新diff_
  bool ShapeEquals(const BlobProto& other);

 protected:
  shared_ptr<SyncedMemory> data_;//数据
  shared_ptr<SyncedMemory> diff_;//数据梯度
  shared_ptr<SyncedMemory> shape_data_;//数据维度信息
  vector<int> shape_;//数据的维度信息
  int count_;//数据的总个数
  int capacity_;//能够存储数据的容量

  DISABLE_COPY_AND_ASSIGN(Blob);
};  // class Blob

}  // namespace caffe

#endif  // CAFFE_BLOB_HPP_

变量说明

变量名说明
shared_ptr<SyncedMemory> data_数据
shared_ptr<SyncedMemory> diff_数据梯度
shared_ptr<SyncedMemory> shape_data_数据维度信息
vector<int> shape_数据的维度信息
int count_数据的总个数
int capacity_能够存储数据的容量

函数说明

函数名说明
Update() d a t a = d a t a − d i f f data = data - diff data=datadiff
asum_data() ∑ i c o u n t ∥ d a t a i ∥ \sum_i^{count}\|{data_i}\| icountdatai
asum_diff() ∑ i c o u n t ∥ d i f f ∥ \sum_i^{count}\|{diff}\| icountdiff
sumsq_data() ∑ i c o u n t d a t a i ∗ d a t a i \sum_i^{count} {data_i * data_i} icountdataidatai
scale_data() d a t a i = α ∗ d a t a i data_i = \alpha*data_i datai=αdatai

proto函数

函数名参数说明说明
void FromProto(const BlobProto& proto, bool reshape)reshape:是否进行形变将proto里的data更新到data_里
将diff更新到diff_
void ToProto(BlobProto* proto, bool write_diff)write_diff:是否写入diff将_data写入到data,将_diff写入到diff
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值