Caffe数据结构一Blob

Blob是Caffe的基本存储单元,用于存储权值(data)和权值增量(diff);

BlobProto对象实现磁盘,内存之间的数据通信。对于加载,保存训练好的模型的权值非常实用。

#include <vector>
#include <iostream>
#include <caffe/blob.hpp>
#include <caffe/util/io.hpp>

using namespace caffe;
using namespace std;


int main(void)
{
  Blob<float> a;
  cout<<"Size : "<< a.shape_string()<<endl;
  a.Reshape(1, 2, 3, 4);
  cout<<"Size : "<< a.shape_string()<<endl;
  float * p = a.mutable_cpu_data();
  float * q = a.mutable_cpu_diff();//权值增量
  for(int i = 0; i < a.count(); i++)
  {
    p[i] = i;
    q[i] = a.count() - 1 - i;
  }
  a.Update(); //更新权值 data =data -diff
  for(int u = 0; u < a.num(); u++)
  {
    for(int v = 0; v < a.channels(); v++)
    {
      for(int w = 0; w < a.height(); w++)
      {
        for(int x = 0; x < a.width(); x++)
        {
          cout<<"a["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"] = "<< a.data_at(u, v, w, x)<<endl;
        }
      }
    }
  }
  cout<<"ASUM = "<<a.asum_data()<<endl;  //求一范数
  cout<<"SUMSQ = "<<a.sumsq_data()<<endl;//二范数,平方和
  BlobProto bp;  //构造对象
  a.ToProto(&bp, true); //将a序列化,两桶diff(默认不带)
  WriteProtoToBinaryFile(bp, "a.blob");  //写入磁盘文件
  BlobProto bp2;
  ReadProtoFromBinaryFileOrDie("a.blob", &bp2);//读取磁盘文件
  Blob<float> b;
  b.FromProto(bp2, true);//从序列化对象bp2中克隆b
  for(int u = 0; u < b.num(); u++)
  {
    for(int v = 0; v < b.channels(); v++)
    {
      for(int w = 0; w < b.height(); w++)
      {
        for(int x = 0; x < b.width(); x++)
        {
          cout<<"b["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"] = "<< b.data_at(u, v, w, x)<<endl;
        }
      }
    }
  }
  return 0;
}
g++ -o app blob_demo_proto.cpp  -I /home/zhao/ming/caffe0/caffe/include/ -D CPU_ONLY -I /home/zhao/ming/caffe0/caffe/.build_release/src/ -L /home/zhao/ming/caffe0/caffe/build/lib/ -lcaffe -lglog -lboost_system
   在源文件的同目录下会产生 a.blob  app  blob_demo.cpp 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值