Caffe学习系列(16):caffe的整体流程

在某社区看到的回答,觉得不错就转过来了:http://caffecn.cn/?/question/123

Caffe从四个层次来理解:Blob,Layer,Net,Solver。

1、Blob

Caffe的基本数据结构,用四维矩阵Batch*Channel*Height*Width表示,存储了包括神经元的

激活值、参数、以及相应的梯度(dW,db)。其中包含有cpu_data、gpu_data、cpu_diff、gpu_diff、

mutable_cpu_data、mutable_gpu_data、mutable_cpu_diff、mutable_gpu_diff这一堆很像的东西,

分别表示存储在CPU和GPU上的数据(印象中二者的值好像是会自动同步成一致的)。其中带data的里面存

储的是激活值和W、b,diff中存储的是残差和dW、db。另外带mutable和不带mutable的一对指针所指

的位置是相同的,只是不带mutable的只读,而带mutable的可写。

2、Layer

代表神经网络的层,由各种各样的层来构成整个网络。一般一个图像或样本会从数据层中读进来,

然后一层一层的往后传。除了数据层比较特殊之外,其余大部分层都包含4个函数:LayerSetUp、Reshape、

Forward、Backward。其中LayerSetup用于初始化层,开辟空间,填充初始值什么的。Reshape是对输入

值进行维度变换,比如pooling接全连接层的时候要先拉成一个向量再计算。Forward是前向传播,Backward是

后向传播。

那么数据是如何在层之间传递的呢?每一层都会有一个(或多个)Bottom和top,分别存储输入和输出,

比如bottom[0]->cpu_data()存输入的神经元激活值,换成top存输出的,换成cpu_diff()存的是激活值的残差,

换成gpu是存在GPU上的数据,再带上mutable就可写了,这些是神经元激活值相关的,如果这个层前后有多个输入输出层,

就会有bottom[1],比如accuracy_layer就有两个输入,fc8和label。而每层的参数会存在this->blobs_里,一般this->blobs_[0]

存W,this->blobs_[1]存b,this->blobs_[0]->cpu_data()存的是W的值,this->blobs_[0]->cpu_diff()存的梯度dW,b和db也

类似,然后换成gpu是存在GPU上的数据,再带上mutable就可写了。

3、Net

Net就是把各种层按train_val.prototxt的定义堆叠在一起,首先进行每个层的初始化,然后不断进行Update,每更新一次就

进行一次整体的前向传播和反向传播,然后把每层计算得到的梯度计算进去,完成一次更新,这里注意每层在Backward中只是计

算dW和db,而W和b的更新是在Net的Update里最后一起更新的。而且在caffe里训练模型的时候一般会有两个Net,一个train一

个test。刚开始训练网络时前面的一大堆输出,网络的结构什么的也都是这里输出的。

4、Solver

Solver是按solver.prototxt的参数定义对Net进行训练,首先会初始化一个TrainNet和一个TestNet,然后其中的Step函数会

对网络不断进行迭代,主要就是两个步骤反复迭代:①不断利用ComputeUpdateValue计算迭代相关参数,比如计算learning rate,

把weight decay②调用Net的Update函数对整个网络进行更新。迭代中的一大堆输出也是在这里输出的,比如当前的loss

和learning rate。

时间: 2024-10-09 21:28:06

Caffe学习系列(16):caffe的整体流程的相关文章

Caffe学习系列(16):各层权值参数可视化

通过前面的学习,我们已经能够正常训练各种model了.我们训练cifar10数据,迭代10000次,然后将训练好的 model保存起来,名称为my_iter_10000.caffemodel,然后使用jupyter notebook 来进行可视化. 首先,导入必要的库 In [1]: import numpy as np import matplotlib.pyplot as plt import os,sys,caffe %matplotlib inline In [2]: caffe_roo

Caffe 学习系列

学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一个测试程序 Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn Caffe学习系列(2):数据层及参数 Caffe学习系列(3):视觉层(Vision Layers)及参数 Caffe学习系列(4):激活层(Activiation Layers)及参数

Caffe学习系列——工具篇:神经网络模型结构可视化

Caffe学习系列--工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 1. Netscope:支持Caffe的神经网络结构在线可视化工具 Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,网址:  http://ethereon.github.io/netscope/quickstart.html  它可以用来可

转 Caffe学习系列(3):视觉层(Vision Layers)及参数

所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision Layers)的参数,视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层. 1.Convolution层: 就是卷积层,是卷积神经网络(CNN)的核心层. 层类型:Convolution lr_mult: 学习率

[Android学习系列16]Android把php输出的json加载到listview

首先写个php脚本输出json,注意,还要输出回车,方便android的bufferreader读取一行 <?php class Book { public $bookid; public $bookname; public $bookinfo; function __construct($id,$name,$info ){ $this->bookid = $id; $this->bookname = $name; $this->bookinfo = $info; } } $boo

Caffe学习系列(8):solver优化方法

上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: "AdaDelta"), Adaptive Gradient (type: "AdaGrad"), Adam (type: "Adam"), Nesterov’s Accelerated Gradient (type: "Nesterov&qu

Caffe学习系列(2):数据层及参数

要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件中.要熟练使用caffe,最重要的就是学会配置文件(prototxt)的编写. 层有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行. 今天我们就先介绍一下数据层. 数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从B

转 Caffe学习系列(2):数据层及参数

http://www.cnblogs.com/denny402/p/5070928.html 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件中.要熟练使用caffe,最重要的就是学会配置文件(prototxt)的编写. 层有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行. 今天我们就

转 Caffe学习系列(5):其它常用层及参数

本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置. 1.softmax-loss softmax-loss层和softmax层计算大致是相同的.softmax是一个分类器,计算的是类别的概率(Likelihood),是Logistic Regression 的一种推广.Logistic Regression 只能用于二分类,而softmax可以用于多分类. softmax与softm