Caffe源码解读 - 总览

本文深入解析Caffe的源码,涵盖SyncedMem、Blob、Layer、Net和Solver类。SyncedMem负责数据存储和交互,Blob封装数据结构与计算,Layer定义前向与反向传播,Net整合层与数据,Solver实现参数优化和网络更新。通过工厂模式创建不同类型的Layer,Solver执行优化过程,包括前向传播、反向传播、参数更新和状态记录。
摘要由CSDN通过智能技术生成

Caffe源码解读

类图

caffe_class


SyncedMem类

该类是caffe数据存储的最底层,里面规定了什么时候分配内存(显存),数据的存储位置以及数据的指针,封装了CPU和GPU之间数据交互的方法,并提供简单的接口进行数据的操作。


Blob类

Blob是caffe基本的数据结构,其主要做了两种封装:

  1. 一个Blob中封装了data_和diff_两个数据指针,分别表示存储的参数和反向传播时计算的梯度。

  2. 因为SyncedMem类存储的数据是一维的,在Blob中,记录一个Blob的shape信息,可以用来记录2维(全连接层in_feature*out_feature)3维4维的数据。并附带了计算数据偏移量、数据求和的方法。


Layer类

Layer类主要定义了caffe中Layer层需要做的任务,即Layer的初始化步骤、需要完成的任务(forward、backward)等。其前向传播得到top blob,反向传播计算出diff。

初始化步骤

void SetUp(const vector<Blob<Dtype>*>& bottom,
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值