【caffe】loss function、cost function和error

@tags: caffe 机器学习

在机器学习(暂时限定有监督学习)中,常见的算法大都可以划分为两个部分来理解它

  1. 一个是它的Hypothesis function,也就是你用一个函数f,来拟合任意一个输入x,让预测值t(t=f(x))来拟合真实值y
  2. 另一个是它的cost function,也就是你用一个函数E,来表示样本总体的误差。

而有时候还会出现loss function,感觉会和cost function混淆。

上quora看了下,有个同名问题,回答的人不多,upvote更少。。回答者里面,普遍认为cost function就是loss function,一个意思。

anyway,还是有个答案提到了区别,我更支持这种看法,参考这里:http://image.diku.dk/shark/sphinx_pages/build/html/rest_sources/tutorials/concepts/library_design/losses.html

简单说,loss function是对于单个样本而言的,比如对于0-1分类问题,当前预测样本x的输出为t,实际值为y,那么loss function就是y-t,或者abs(y-t);对于连续型数据的预测,也就是回归问题,loss function可以是差值的平方:(y-t)^2
cost function是对于样本总体而言的,对于0-1分类问题,loss function是n个样本的loss function取值的均值;而对于回归问题,cost function是n个样本的平方误差的平均,俗称均方误差(mean square error)

总结:cost function是各个样本的loss funcion的平均

========== 那么caffe下的loss又是怎么一回事?===========

caffe通常是视觉任务用的深度学习框架,处理的原始数据是图片。每次处理一张图片,这本身可以run,算是OK,但不够好。

每次处理多张图片,称为一个batch(批次),比如训练图片一共有4000张,每个batch处理50张。

按照batch来处理图片后,每个batch算出一个loss,也就是这50张图片的loss平均。当然这个loss其实并不是重点。重点是,用这50个样本,在做梯度下降来更新权值的时候,梯度是根据这50个样本算出来的均值,而不是用某一个图片的梯度:

这也就是要使用batch的原因。

=========== error又是什么 ============
error是说,一个预测结果和实际标签比较,一样的话不算错,不一样就算错(仅考虑分类问题)。
那么我在一个miniBatch之内,比如100张图,每张图对应一个分类的标签,以及一个预测出来的结果,这个预测结果和标签做比较,如果不一致说明“预测错了”。统计所有100张图上“预测错误的结果”的数量,比如有3个,那么error就认为是3,或者表示为3%。
也就是说,error表示的是“累计错误数量的占比”。从这一点来看,error关注的是“是否正确”的累计,而不是“单个结果上错误的程度”,error关注的是“质”,而loss关注的是“错误的程度”(根据loss函数来决定),这一点上,error和loss是有所不同的。

时间: 2024-10-25 17:19:50

【caffe】loss function、cost function和error的相关文章

机器学习-监督学习-cost function

1.引言 当我们的训练集如下图1所示,可以假设hypothesis函数如图2 θ0和θ1我们称为hθ(x)函数的2个参数,h是x的函数,所以有时候也记着h(x) 对于这个已有的hypothesis,我们需要什么方法来评估这个假设函数的好坏呢? 因此我们定义了一个叫"代价函数"cost function 来评估当前hθ(x)函数 2. 代价函数 cost function也叫作loss function,就是对hθ(x)函数进行评估的一个函数. 代价函数最重要的作用就是是用来度量预测错误

php5.3提示Function ereg() is deprecated Error问题

  PHP 5.3 ereg() 无法正常使用,提示"Function ereg() is deprecated Error". 问题根源是php中有两种正则表示方法,一个是posix,一个是perl,php6打算废除posix的正则表示方法所以后来就加了个preg_match.此问题解决办法很简单,在ereg前加个过滤提示信息符号即可:把ereg()变成@ereg().这样屏蔽了提示信息,但根本问题还是没有解决,php在5.2版本以前ereg都使用正常,在5.3以后,就要用preg_

php5.3提示Function ereg() is deprecated Error问题解决方法_php技巧

本文实例讲述了php5.3提示Function ereg() is deprecated Error问题解决方法.分享给大家供大家参考.具体实现方法如下: 一.问题: PHP 5.3 ereg() 无法正常使用,提示"Function ereg() is deprecated Error"是因为它长ereg 函数进行了升级处理,需要像preg_match使用/ /来规则了,当然也是php5.3把ereg给废掉的节奏了. PHP 5.3 ereg() 无法正常使用,提示"Fun

浅析jQuery(function(){})与(function(){})(jQuery)之间的区别

 本篇文章主要是对jQuery(function(){})与(function(){})(jQuery)之间的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Jquery是优秀的Javascrīpt框架.我们现在来讨论下在 Jquery 中两个页面载入后执行的函数.   $(document).ready(function(){   // 在这里写你的代码... });在DOM加载完成时运行的代码   可以简写成   jQuery(function(){  });    (func

javascript-js中function套function问题

问题描述 js中function套function问题 js中如果发生function中有局部刷新,肯定会最后有个局部刷新之后的方法调用,如果我把这个方法放到局部刷新所在的函数内,那么这个内嵌的function如何调用到外层这个function的事件: 比如: function(e){ .......... $.ajax{ ....... ....... ....... after:afterQuery } function afterQuery(data){ //这个afterQuery就是内

function aa( function (data)){} data表示什么,这种写法是什么意思

问题描述 functionaa(function(data)){}data表示什么,这种写法是什么意思 解决方案 解决方案二:functionaa(function(data)){}function(data){}是匿名函数data是其传入参数匿名函数可以有效的保证在页面上写入js,而不会造成全局变量的污染,这在给一个不是很熟悉的页面增加js时非常有效这么写应该是为了想去调用匿名函数function(data){}吧...哈哈愚见,千万别太信最好自己查查书-.-

理解Mysql CREATE FUNCTION/DROP FUNCTION语法

一个自定义函数 (UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去 扩展MySQL. CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} SONAME shared_library_name DROP FUNCTION function_name function_name 是 用在SQL声明中以备调用的函数名字.RETURNS 子句说明函数返回值的类型. sh

简单谈谈jQuery(function(){})与(function(){})(jQuery)_jquery

开发jQuery插件时总结的一些经验分享一下. 一.先看 jQuery(function(){ }); 全写为 jQuery(document).ready(function(){ }); 意义为在DOM加载完毕后执行了ready()方法. 二.再看 (function(){ })(jQuery): 其实际上是执行()(para)匿名方法,只不过是传递了jQuery对象. (function($) {-})(jQuery); 这里实际上是匿名函数,如下: function(arg){-} 这就定

(function(){}})(); and (function(){}());的区别?

 (function(){})()这个语句,其实是首先用分组运算符评估了一个函数表达式,随后参与"函数调用".而(function(){}())这个语句,则是用分组运算符评估了一个函数调用,随后由于语句的结束而被执行 功能上2个是一样的