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全栈day21(函数的解耦)

    针对上一篇对文件的操作程序,执行一次操作的函数查询,添加,修改,删除都需要在函数里面定义文件处理的过程,整体函数看起来比较乱,代码重复过多 下面新定义一个函数专门用于处理文件操作,然后在不同的函数里面 ...

  2. 常用web对比

    Apache与nginx对比 nginx相对于apache的优点: 1.轻量级同样启动WEB服务,比apache占用更少的内存以及资源: 2.抗并发性能高,核心区别在于apache是同步多线程模型.一 ...

  3. Spring Cloud Zuul与网关中间件

    Spring Cloud Zuul与网关中间件_网易订阅 http://dy.163.com/v2/article/detail/DC7L8UV10511HSJK.html

  4. 1.1 - python基础语法 - 总结练习题

    1.编译型与解释型语言的区别,哪些属于编译型,哪些属于解释型 编译型:c/c++/go 运行速度快,开发效率低,不可跨平台 解释型:python/java/php/ruby 运行速度低,开发效率高,可 ...

  5. 永久解决delphi 2010不能2次启动问题

    由于在Windows安装了最近的更新(KB2982791, KB2970228)后,Delphi的IDE需要创建的一个文件%TEMP%\EditorLineEnds.ttr会被系统锁定,导致除非重新启 ...

  6. mdf, ldf文件导入到sql server 2005的方法

    mdf, ldf文件导入到sql server 2005的方法 在实际的工作中, 有很多涉及到数据库资料的备份,转移, 恢复等方面的工作, 但是并不是所有的资料都是以.bak格式存在的, 比如说, 你 ...

  7. html读写excle文档

    import.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  8. 浅谈Spark2.x中的Structured Streaming

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

  9. Linux SSH免登录配置总结(转)

    转载请出自出处:http://eksliang.iteye.com/blog/2187265 一.原理 我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器Serv ...

  10. .htaccees什么鬼?怎么用?

    .htaccess文件全称Hypertext Access(超文本入口).提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作 ...