Caffe学习笔记2-Caffe的三级结构(Blobs,Layers,Nets)
来源:互联网 发布:网络贷款骗局 编辑:程序博客网 时间:2024/06/01 08:21
根据Caffe官方文档介绍,caffe大致可以分为三层结构blob,layer,net。数据的保存,交换以及操作都是以blob的形式进行的,layer是模型和计算的基础,net整和并连接layer。
Blobs
Blob是Caffe的基本数据结构,具有CPU和GPU之间同步的能力,它是4维的数组(Num, Channels, Height, Width)。
设Blob数据维度为 number N x channel K x height H x width W,Blob是row-major保存的,因此在(n, k, h, w)位置的值物理位置为((n * K + k) * H + h) * W + w,其中Number/N是batch size。
Blob同时保存了data
和diff
(梯度),访问data
或diff
有两种方法:
1 const Dtype* cpu_data() const; //不修改值2 Dtype* mutable_cpu_data(); //修改值
Blob会使用SyncedMem自动决定什么时候去copy data以提高运行效率,通常情况是仅当gnu或cpu修改后有copy操作,文档里面给了一个例子:
1 // Assuming that data are on the CPU initially, and we have a blob.(顺便查了下一直有疑问foo是什么意思。。)2 const Dtype* foo;
3 Dtype* bar;4 foo = blob.gpu_data(); // data copied cpu->gpu.5 foo = blob.cpu_data(); // no data copied since both have up-to-date contents.6 bar = blob.mutable_gpu_data(); // no data copied.7 // ... some operations ...8 bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.9 foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data10 foo = blob.gpu_data(); // no data copied since both have up-to-date contents11 bar = blob.mutable_cpu_data(); // still no data copied.12 bar = blob.mutable_gpu_data(); // data copied cpu->gpu.13 bar = blob.mutable_cpu_data(); // data copied gpu->cpu.
Layer
所有的Pooling,Convolve,apply nonlinearities等操作都在这里实现。在Layer中input data用bottom
表示,output data用top
表示。每一层定义了三种操作setup
(Layer初始化),forward
(正向传导,根据input计算output),backward
(反向传导计算,根据output计算input的梯度)。forward
和backward
有GPU和CPU两个版本的实现。
Net
Net由一系列的Layer组成(无回路有向图DAG),Layer之间的连接由一个文本文件描述。模型初始化Net::Init()
会产生blob和layer并调用Layer::SetUp
。在此过程中Net
会报告初始化进程。这里的初始化与设备无关,在初始化之后通过Caffe::set_mode()
设置Caffe::mode()
来选择运行平台CPU或GPU,结果是相同的。
模型的格式
模型定义在.prototxt
文件中,训练好的模型在model
目录下.binaryproto
格式的文件中。模型的格式由caffe.proto
定义。采用Google Protocol Buffer可以节省空间还有它对C++和Pyhton的支持也很好。
- Caffe学习笔记2-Caffe的三级结构(Blobs,Layers,Nets)
- Caffe学习笔记2-Caffe的三级结构(Blobs,Layers,Nets)
- Caffe学习笔记——Caffe的三级结构(Blobs,Layers,Nets)
- Caffe学习笔记——Caffe的三级结构(Blobs,Layers,Nets)
- Caffe学习笔记3--caffe的三级结构:Blobs, Layers,Nets
- Caffe学习2--Blobs,Layers与Nets
- caffe教程笔记《Blobs, Layers, and Nets》
- Caffe学习:Blobs, Layers, and Nets
- Caffe学习:Blobs, Layers, and Nets
- Caffe学习:Blobs, Layers, and Nets
- 浅读Caffe: Blobs, Layers, and Nets
- Caffe中的Blobs,Layers和Nets
- Blobs, Layers, and Nets: anatomy of a Caffe model
- Caffe 初学拾遗(三) Blobs, Layers, and Nets
- Caffe官网 Tutorial: Nets, Layers, and Blobs caffe模型分解分析
- caffe 相关--Blobs, Layers, and Nets: anatomy of a Caffe model
- caffe学习笔记3.1 -- caffe的三级结构
- caffe学习笔记tutorial:Layers
- mysql 存储过程 循环插入
- 黑马程序员-OC内存管理
- Linux系统下proc目录详解
- apns 数据格式
- Linux线程-互斥锁pthread_mutex_t
- Caffe学习笔记2-Caffe的三级结构(Blobs,Layers,Nets)
- 深度学习文章
- jquery 简单的动画效果
- uva 11384 二分/ 递推
- Mysql的存储引擎之:MyISAM存储引擎
- 揭秘深网和暗网:你所不知道的互联网
- 位移动画的简单使用
- 笔试的一些题目
- 7.SessionManager(session生命周期管理)