caffe学习-代码概览

caffe的核心模块
以下内容整理自《深度学习轻松学》-冯超
SyncedMemory、Blob、Layer、Net、Solver、多GPU训练和IO
1.SyncedMemory
在深度学习训练的时候需要反复从CPU和GPU之间交互数据,自己写代码的时候也要写CPU和GPU之间数据传输代码,维护GPU和CPU的两个指针。SyncedMemory将这些操作进行了封装,调用相关函数就可以实现CPU和GPU数据的同步。其工作原理简介如下
class SyncedMemory
{
void* cpu_ptr_;
void* gpu_ptr_;
SyncedHead head_;
}
enum SyncedHead{UNINITIALIZED,HEAD_AT_CPU,HEAD_AT_GPU,SYNCED};
inline void SyncedMemory: :to_gpu ()
{
switch (head_)
{
case HEAD AT CPU :
caffe_gpu_memcpy(size_’ cpu_ptr_, gpu_ptr_);
head_ = SYNCED;
break ;
}
}
2.Blob
他在SyncedMemory的基础上进行的封装,维护两个指针,data和diff,data是原始数据,diff是梯度传播的更新量。Blob基本完成了caffe数据的封装,Layer和Net中都是Blob完成的计算
3.Layer
Blob是对数据的抽象,Layer是对模型层次的抽象,首先定义了Layer类,里面包含层创建和运算必须的接口。所有的功能层都要继承他里面定义的抽象方法。对于复杂的功能层也会定义自己的基类,比如base_conv_layer。采用了模板和工厂模式,工厂模式使得子类的具体方法通过多态的方式调用
4.Net
Net是表示整个模型的类,对数据和层进行进一步封装,留下了数据的输入输出接口,参数加载接口。
5.Solver
他封装了模型训练和测试的方法。基类为Solver,新的优化方法可以继承Solver;训练过程中可以注入回调函数,在每一轮训练前和反向传播后都会进行调用。
6.多GPU训练
InternalThread和P2PSync两个类,实现基于数据并行的并发优化算法
7.IO
DataReader和DataTransformer类,数据输入和预处理,Filler模型参数的初始化
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值