目录 写在前面 成员变量的含义及作用 构造与析构 内存同步管理 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 在Caffe源码理解1中介绍了Blob类,其中的数据成员有 shared_ptr<SyncedMemory> data_; shared_ptr<SyncedMemory> diff_; std::shared_ptr 是共享对象所有权的智能指针,当最后一个占有对象的shared_ptr被销毁或再赋值时,对象会被自动销毁并释放内存,见cp…
博客: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…
目录 写在前面 template method设计模式 Layer 基类 Layer成员变量 构造与析构 SetUp成员函数 前向传播与反向传播 其他成员函数 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 层的概念在深度神经网络中占据核心位置,给定输入,数据在层间运算流动,最终输出结果.层定义了对数据如何操作,根据操作的不同,可以对层进行划分(具体参见Caffe Layers): Data Layers:跟据文件类型和格式读取和处理数据,给网络输入 Visio…
网络结构 首先我们抽象理解下一个网络结构是怎样的,如下图所示 F1,F2,F3为某种函数 input为输入数据,output为输出数据 X1,X2为为中间的层的输入输出数据 总体来说有以下关系 X1 = F(input) X2 = F1(X1) output = F2(X2) 在训练过程中output其实就是loss层的输出,训练的目的就是为了把loss值降到最低 链式法则 链式法则(英文chain rule)即是微积分中的求导法则,用于求一个复合函数的导数,是在微积分的求导运算中一种常用的方法…
SyncedMemory类简介 最近在阅读caffe源码,代码来自BVLC/caffe,基本是参照网络上比较推荐的 Blob-->Layer-->Net-->Solver 的顺序来分析.其中SyncedMemory类是caffe中底层的结构,负责操作(申请.拷贝等)内存或显存中的数据. syncedmem.cpp源码 SyncedMemory::SyncedMemory() //构造函数,初始化内部的变量,size为0,指针为空等 : cpu_ptr_(NULL), gpu_ptr_(N…
Blob是Caffe中层之间数据流通的单位,各个layer之间的数据通过Blob传递.在看Blob源码之前,先看一下CPU和GPU内存之间的数据同步类SyncedMemory:使用GPU运算时,数据要在GPU显存中,但是一开始数据是通过CPU读到内存,通过类SyncedMemory来实现显存和内存之间的数据的同步. SyncedMemory 先看一下成员变量 //数据在cpu或gpu,指向数据的指针 void* cpu_ptr_; void* gpu_ptr_; size_t size_;//数…
Blob类简介 Blob是caffe中的数据传递的一个基本类,网络各层的输入输出数据以及网络层中的可学习参数(learnable parameters,如卷积层的权重和偏置参数)都是Blob类型.Blob内部包含SyncedMemory类型的 data_ (数据,用于前向计算)和 diff_ (梯度,用于反向传播),以及表示数据形状的 shape_data_ (旧版本)和 shape_ (新版本).Blob中还有表示有效数据的个数的变量 count_ 和表示当前数据的最大容量的变量 capaci…
参考网址:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 1.caffe代码层次熟悉blob,layer,net,solver几类,blob:作为数据输出的媒介,无论是网络权重参数,还是输入数据,都是转化为blob数据结构来存储.layer:作为网络的基础单元,神经网络中层与层间的数据节点.前后传递都在数据结构中被实现,net:作为网络的整体骨架,决定了网络中的层次数目以及各个层的类别solver:作为网络的求解策略,涉…
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下syncedmem文件. 1.      include文件: (1).<caffe/common.hpp>:此文件的介绍可以参考:http://blog.csdn.net/fengbingchun/article/details/54955236  : (2).<caffe/util/math_functions.hpp>:此文件的介绍可以参考: http…
Caffe源码(caffe version:09868ac , date: 2015.08.15)中的一些重要头文件如caffe.hpp.blob.hpp等或者外部调用Caffe库使用时,一般都会include<caffe/common.hpp>文件,下面分析此文件的内容: 1.      include的文件: boost中的智能指针头文件<boost/shared_ptr.hpp>,作用类似于C++11中的模板类shared_ptr,通过引用计数方式自动释放所指的对象,不用显示…