Caffe源码理解1:Blob存储结构与设计

Blob作为Caffe的基础数据结构,用于存储和传输数据,提供统一内存接口。它隐藏了CPU与GPU之间的数据同步,根据需求自动同步。Blob支持Nd维数组,常用于表示图像批次、模型参数等。主要成员变量包括数据区,行优先存储。成员函数涉及构造、设置、数据更新、运算和辅助操作。在训练过程中,Blob通过Update函数更新参数。
摘要由CSDN通过智能技术生成

博客:blog.shinelee.me | 博客园 | CSDN

Blob作用

Caffe官方描述:

A Blob is a wrapper over the actual data being processed and passed along by Caffe, and also under the hood provides synchronization capability between the CPU and the GPU. Mathematically, a blob is an N-dimensional array stored in a C-contiguous fashion.

Caffe stores and communicates data using blobs. Blobs provide a unified memory interface holding data; e.g., batches of images, model parameters, and derivatives for optimization.

Blobs conceal the computational and mental overhead of mixed CPU/GPU operation by synchronizing from the CPU host to the GPU device as needed. Memory on the host and device is allocated on demand (lazily) for efficient memory usage.

Blob是Caffe中的基础数据结构,主要作用如下:

  1. 存储和传输数据,对外提供统一的内存接口。在Caffe中,输入图像、每层的权重和反向传播时的梯度、每层的输入和输出等都以Blob形式管理
  2. 隐藏CPU和GPU之间数据同步的细节(通过SyncedMemory实现),用户使用时不需要自己管理CPU和GPU间的数据同步

在逻辑上,Blob是个 N d N_d Nd维张量。当 N d = 4 N_d=4 Nd=4时,Blob的shape定义为 N ∗ C ∗ H ∗ W N * C * H * W NCHW,即 N u m ∗ C h a n n e l ∗ H e i g h t ∗ W i d t h Num * Channel * Height * Width NumChannelHeightWidth,可以表示输入图像Batch、卷积层的kernel参数、卷积层的输入输出map等;当 N d = 2 N_d=2 Nd=2时,可以表示全连接层的权重, N o u t ∗ N i n N_{out} * N_{in} NoutNin;当 N d = 1 N_d=1 Nd=1时,可以表示卷积层和全连接层的bias参数。

具体地,

  • N d = 4 N_d=4 Nd=4Blob表示输入图像时, N N N为当前批次的图片数量即MiniBatchNum, C C C为图像的通道数,RGB图 C = 3 C=3 C=3 H H H W W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值