Caffe学习笔记(二):Caffe前传与反传、损失函数、调优
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前传与反传、损失函数、调优的更多相关文章
- Caffe学习笔记(一):Caffe架构及其模型解析
Caffe学习笔记(一):Caffe架构及其模型解析 写在前面:关于caffe平台如何快速搭建以及如何在caffe上进行训练与预测,请参见前面的文章<caffe平台快速搭建:caffe+wind ...
- CAFFE学习笔记(五)用caffe跑自己的jpg数据
1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载 ...
- Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)
0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...
- Caffe学习笔记(三):Caffe数据是如何输入和输出的?
Caffe学习笔记(三):Caffe数据是如何输入和输出的? Caffe中的数据流以Blobs进行传输,在<Caffe学习笔记(一):Caffe架构及其模型解析>中已经对Blobs进行了简 ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- Caffe学习笔记3
Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...
- Caffe 学习笔记1
Caffe 学习笔记1 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和 ...
- Caffe学习笔记2
Caffe学习笔记2-用一个预训练模型提取特征 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hi ...
- CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式
1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...
随机推荐
- 2017 Multi-University Training Contest - Team 2——HDU6045&&HDU6047&&HDU6055
讲一下这场多校赛里面比较简单的三个题 HDU6045 Is Derek lying? 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6045 题意:有 ...
- 与python的第一次邂逅
python简介 一.什么是python python是一种面向对象.直译式的计算机程序语言,所以有了武老师的那句名言:一切皆为对象 python的设计哲学是:“优雅”,“明确”,“简单” pytho ...
- 荣誉墙项目day26 django 项目路由配置
项目路由配置文件包括:配置目录里的urls.py文件和各个app目录里的urls.py文件 1.include()——从项目主路由分配到各APP主路由 from django.conf.urls im ...
- ssh无密码登录设置
为啥要设置ssh无密码登录? 我们先来看一下分布式系统的一键启动流程, 在matser机器上运行脚本,脚本检测有多少slavers,然后通过ssh登录到slavers,进入到相同的目录(或者通过$XX ...
- 申请startssl免费一年ssl证书(转)
原文:http://www.live-in.org/archives/1296.html 申请过程步骤蛮多的,对于像我这样的小白来说还是截图+文字记录下比较好.浏览器是firefox. 1.打开htt ...
- 登录plsql 报错 the account is locked --用户被锁
登录数据库服务器,进入oracle用户下: [root@uumsnormal-oracle admin]# su - oracle [oracle@uumsnormal-oracle ~]$ sqlp ...
- Kafka笔记整理(一)
Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...
- UVA+POJ中大数实现的题目,持续更新(JAVA实现)
UVA10494:If We Were a Child Again 大数除法加取余 import java.util.Arrays; import java.util.Scanner; import ...
- 闪回事务(Flashback Transaction)
到目前为止,介绍的所有功能均不会直接将数据恢复为“以前”的样子.闪回查询只是查看,闪回数据归档只是延伸了闪回查询的时间窗口,闪回事务查询虽然提供了撤销SQL,但是否执行及如何执行还需要管理员进一步手动 ...
- Python-argparse-命令行与参数解析
import argparse import numpy as np import cv2 import os import numpy.random as npr from dface.core.u ...