Caffe 数据结构——Blob(上)

最近一直在看Caffe C++ 这块的东西,特此整理此份Caffe 学习专栏,所有代码均基于C++实现。本篇博文我们将介绍Blob,并从源码去分析Blob在Caffe中是干什么的,怎么使用它,废话不多说。下面开始介绍Blob。

Blob作为Caffe中用于存储和交换数据的基础数据结构。Blob是一个4维的数组,BIob提供了统一的存储器接口。

Blob在内存中中表示为4维数组,维度从低到高为(width_, height_, channels_, num_),用于存储数据或者权值(data)和权值增量(diff),在进行网络计算的时候,每层的输入、输出都需要通过Blob对象缓冲。

首先我们对Blob进行简短的使用介绍,Blob是包含在头文件 #include<caffe/blob.hpp>中,命名空间是caffe。

Blob是一个模板类,创建对象的时候需要制定模板参数,下面介绍一个简短的测试程序,blob_demo.cpp,代码如下,保存的目录在 /home/wdong/code/caffeLearnning/blob_demo.cpp

#include <vector>
#include <iostream>
#include <caffe/blob.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;
  
  return 0;
}

上述代码,首先创建了浮点型Blob对象 a, 并打印对象a的各个维度信息,然后调用其 Reshape() 方法进行维度reshape操作,然后再打印其各个维度的信息。

再终端对上述 blob_demo.cpp 进行编译,首先进入blob_demo.cpp所在目录,我这里将其放在/home/wdong/code/caffeLearning 目录下,编译命令如下:

g++ -o app blob_demo.cpp -I /home/wdong/caffe/include/ -D CPU_ONLY \
> -I /home/wdong/caffe/.build_release/src/ -L /home/wdong/caffe/build/lib/ -lcaffe

 执行完该命令,会在 /home/wdong/code/caffeLearning/ 下生成可执行程序 app,执行下面的命令,运行改程序:

export LD_LIBRARY_PATH=/home/wdong/caffe/build/lib/:$LD_LIBRARY_PATH
./app 

运行结果,如下图所示:

创建Blob对象之后,我们可以通过mutable_cpu_data() 函数修改内部数值,常见

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值