数字识别之---介绍损失函数

损失函数:

是模型优化的目标,用于在众多参数取值中,识别最理想的取值。损失函数的计算在训练过程的代码中,每一轮模型训练的过程都相同,分为如下三步:
1.先根据输入数据正向计算预测输出

2.在根据预测值和真实值计算损失

3.最后根据损失反向传播梯度并更新参数

损失函数的选择:

不同的深度学习任务需要有各自适宜的损失函数。如,在房价预测模型中,输入是13个x来预测房价,即输出是y。这个任务显而易见是属于回归任务。而在手写数字识别任务中,输入的是28*28的图像输出的是它的标签,即0~9之间的10个整数,属于分类任务。

使用均方误差作为分类任务的损失函数存在逻辑和效果上的欠缺。

在房价预测的案例中,由于房价本身就是一个连续的实数值,因此以模型输出的数值和真实房价差距作为损失函数(LOSS)是符合道理的。但对于分类问题,真实结果是分类标签,而模型输出是实数值,导致两者相减作为损失不具备意义。

那么,什么是分类任务的合理输出呢?分类任务本质上是“某种特征组合下的分类概率”,下面以一个简单的案例说明。如图所示
 

数字识别之---介绍损失函数_第1张图片

                                                                       图 :观测数据和背后规律之间的关系

在案例中,医生根据肿瘤大小x作为肿瘤性质y的参考判断(判断因素有很多,肿瘤大小只是其中之一),那么我们观测该模型的结果是x和y的标签(1为恶性,0为良性)。而这个数据背后的规律是不同大小的肿瘤,属于恶性肿瘤的概率。观测数据是真实规律抽样下的结果,分类模型应该拟合这个真实规律,输出属于该分类标签的概率。

Softmax函数:

如果模型能输出10个标签的概率,对应真实标签的概率输出尽可能接近100%,而其他标签的概率输出尽可能接近0%,且所有输出概率之和为1。这是一种更合理的假设!与此对应,真实的标签值可以转变成一个10维度的one-hot向量,在对应数字的位置上为1,其余位置为0,比如标签“6”可以转变成[0,0,0,0,0,1,0,0,0,0]。

为了实现上述思路,需要引入Softmax函数,它可以将原始输出转变成对应标签的概率,公式如下,其中CCC是标签类别个数。

从公式的形式可见,每个输出的范围均在0~1之间,且所有输出之和等于1.对应到代码上,我们需要在网络定义部分修改输出层:self.fc = FC(name_scope,size=10,act='softmax'),即是对全连接层FC的输出加一个softmax运算。

下图是一个三个标签的分类模型使用的softmax输出层,从中可见原始输出的

你可能感兴趣的:(学习记录,python,网络)