Caffe学习笔记(二):Caffe前传与反传、损失函数、调优

在caffe框架中,前传/反传(forward and backward)是一个网络中最重要的计算过程;损失函数(loss)是学习的驱动,类似于视频编码中的率失真代价,是衡量学习的程度,或者说,学习的目的是找到一个网络权重的集合,使得损失函数最小;Solver是通过协调网络的前向推断计算和反向计算来对参数进行更新,从而达到减小loss的目的。

下面将对forward and backward、loss、solver分别进行介绍。

1、前传/反传(forward and backward)

如前所述,前传和反传是一个网络中的最重要的计算过程。

所谓前传就是:给定的输入计算输出,在前传过程中,caffe组合每一层的计算得到整个模型的计算“函数”;需要注意的是:此过程是一个自底向上的过程。

所谓反传就是:根据损失来计算梯度从而进行学习,在反传过程中,caffe通过自动求导并反向组合每一层的梯度来计算整个网络的梯度,需要注意的是该过程自顶向下进行。

在caffe中,Net::Forward()和Net::Backward()方法实现网络的前传和反传,而Layer::Forward()和Layer::Backward()计算每一层的前传和反传。

Solver优化一个模型,首先通过调用前传获得输出和损失,然后调用反传产生模型的梯度,将梯度和权值更新后相结合来最小化损失。这样,使得Solver、网络和层之间的分工可以模块化且更加清晰。

2、损失函数(loss)

与视频编码中的率失真代价函数类似,损失函数或者误差/代价/目标函数通过将参数集(即当前的网络权值)映射到一个可以标识这些参数“不良程度”的标量值来学习目标,而学习的目的就是找到一个网络权重的集合,使得损失函数最小。

在caffe中,损失是通过网络的前向计算(前传)得到的,基本过程为:每一层由一系列的输入blobs(bottom)产生一系列的输出blobs(top),这些层的某些输出可以作为损失函数。对于含有多个损失层的网络,损失权值可以被用来指定它们之间的相对重要性。按照惯例,有着loss后缀的caffe层对损失函数有贡献,其它层被假定仅仅用于中间计算。然而,通过在层定义中添加一个loss_weight:<float>字段到由该层的top blob,任何层都可以作为一个loss,对于带loss后缀的层来说,其对于该层的第一个top blob含有一个隐式的loss_weight:1,而其它层对于所有的top blob有一个隐式的loss_weight:0。

同时,对于任何可以反传的层,可允许给予一个非0的loss_weight,那么,在caffe中最终的损失函数可以通过对整个网络中所有权值损失进行求和计算获得。

3、调优Solver

Solver通过协调Net的前向推断计算和反向梯度计算来对参数进行更新,从而达到减小loss的目的。因此,caffe模型的学习被分为两个部分:一是由Solver进行优化、更新参数;二是由Net计算出loss和gradient。

关于前传/反传、损失函数以及调优Solver将会在接下来结合代码进行深入分析。

Caffe学习笔记(二):Caffe前传与反传、损失函数、调优的更多相关文章

  1. Caffe学习笔记(一):Caffe架构及其模型解析

    Caffe学习笔记(一):Caffe架构及其模型解析 写在前面:关于caffe平台如何快速搭建以及如何在caffe上进行训练与预测,请参见前面的文章<caffe平台快速搭建:caffe+wind ...

  2. CAFFE学习笔记(五)用caffe跑自己的jpg数据

    1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载 ...

  3. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  4. Caffe学习笔记(三):Caffe数据是如何输入和输出的?

    Caffe学习笔记(三):Caffe数据是如何输入和输出的? Caffe中的数据流以Blobs进行传输,在<Caffe学习笔记(一):Caffe架构及其模型解析>中已经对Blobs进行了简 ...

  5. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  6. Caffe学习笔记3

    Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...

  7. Caffe 学习笔记1

    Caffe 学习笔记1 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和 ...

  8. Caffe学习笔记2

    Caffe学习笔记2-用一个预训练模型提取特征 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hi ...

  9. CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

    1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...

随机推荐

  1. Exchange Port

    Get-POPSettings-110 Get-IMAPSettings-143 Exchange Network Port References Exchange Server 2000 http: ...

  2. HDU4686—Arc of Dream

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目意思:给出一个n,算这个式子,给出A0,B0,AX,AY,然后存在以下的递推关系. a0 = ...

  3. GROUP_CONCAT 拼接顺序

    用 group_concat 拼接后的顺序 group_concat(id order by id) 里面id更新需要更换

  4. [LeetCode] 9.Palindrome Number - Swift

    Determine whether an integer is a palindrome. Do this without extra space. 题目意思:判断一个整数是否是回文数 例如:1232 ...

  5. geo实现方案

    1.数据库内在支持GIS(地理信息系统) MySQL: 目前只有MyISAM引擎是支持GIS的,Innodb在5.7版本中才支持空间索引.MyISAM这个引擎不支持事务.外键,而且是表锁.适合读为主, ...

  6. intel EPT 机制详解

    2016-11-08 在虚拟化环境下,intel CPU在处理器级别加入了对内存虚拟化的支持.即扩展页表EPT,而AMD也有类似的成为NPT.在此之前,内存虚拟化使用的一个重要技术为影子页表. 背景: ...

  7. (转)理解POST和PUT的区别,顺便提下RESTful

    这两个方法咋一看都可以更新资源,但是有本质区别的 具体定义可以百度,我这里就不贴了,光说我自己的理解 首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称 ...

  8. JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

    Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++. Java开发,对象就在堆中,一般而言,堆中只有对象. ...

  9. 浅谈Spark2.x中的Structured Streaming

    在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好. 连续应用程序c ...

  10. 爱用bootstrap系列一:Sublime上写H5及运行

    sublime上使用插件快速生成模板文件 第一,你要先下载package control的插件,这是一款用来管理插件的插件 . 可能会由于你所在的网络通过代理访问而导致安装失败,你可以通过下面的步骤来 ...