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. Python全栈day9(Python基础)

    Python基础 一,Windows安装Python3.5 下载地址:https://www.python.org/ftp/python/3.5.2/python-3.5.2rc1-amd64.exe ...

  2. C语言文件读写(结构体文件)

    有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名) xiaoming ...

  3. 深入学习AngularJS中数据的双向绑定机制

    来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...

  4. java面试基础题------》抽象类和接口有什么异同

    划重点!!!! 1.抽象类(abstract class)和接口(interface)有什么异同? 相同点 * 都不能被直接实例化,都可以通过继承实现其抽象方法. * 都是面向抽象编程的技术基础,实现 ...

  5. Accuracy, Precision, Resolution & Sensitivity

    Instrument manufacturers usually supply specifications for their equipment that define its accuracy, ...

  6. Java集合—Map

    简介 Map用户保存具有映射关系的数据,因此Map集合里保存着两组数,一组值用户保存Map里的key,另一组值用户保存Map里的value,key和value都可以是任何引用类型的数据.Map的key ...

  7. jenkin构建项目执行脚本后,脚本中启动的进程也随之关闭的解决办法

    问题描述: 之前用jenkins构建项目(maven项目)后都是通过ssh先将war文件推送到远程服务器,然后执行远程的脚本(更新项目,重启tomcat),一直没有出现问题,今天使用jenkins构建 ...

  8. MySQL 参数

    I see a lot of people filtering replication with binlog-do-db, binlog-ignore-db, replicate-do-db, an ...

  9. DataGird 相关

    DataGird控件          DataGirdView 控件    DataGird类  他们之间是什么关系??????? DataGridView 控件是替换 DataGrid 控件的新控 ...

  10. Curl https 访问

    如果访问https的网页,出现: curl: (60) SSL certificate problem: unable to get local issuer certificate 将 将 CURL ...