Tensorflow笔记之损失函数

25 篇文章 0 订阅
18 篇文章 2 订阅

 首先我们要明白神经网络模型的效果以及优化的目标是通过损失函数来定义的。下面将介绍用于分类和回归的经典损失函数。并通过Tensorflow实现。

(1)分类问题和回归问题是监督学习的两大类。现在介绍分类问题和回归问题中的经典损失函数。

  通过神经网络解决多分类问题最常见的方法就是设置n个输出节点,其中n为类别的个数,对于每一个样例,神经网络可以得到一个n维数组作为结果输出。数组中的每个维度对应一个类别。在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0.以识别数字1为例,神经网络模型的输出结果接近[0,1,0,0,0,0,0,0,0,0]越好。那么如何判断一个输出向量和期望的向量有多接近呢?交叉熵(cross entropy)是常用的评级方法之一。其刻画了两个概率分布之间的距离。是一种常用的损失函数,其定义公式为

其中p和q为两个概率分布。

Softmax回归本身可以作为一个学习算法来优化分类结果,但是Tensorflow中,Softmax回归的参数被去掉了,他只是额外的一层处理层,将神经网络的输出变为概率分布。加上了Softmax回归的神经网络结构图如下:

假设原始的神经网络输出为,那么经过Softmax回归处理后的输出为:

从以上公式可以看出,原始神经网络的输出被用作置信度来生成新的输出,而新的输出满足概率分布所有要求。这个新的输出可以理解为经过神经网络的推导,一个样例为不同类别的概率分别是多大。这样就把神经网络输出变成一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。

从交叉熵的公式中可以看出交叉熵函数不是对称函数,它刻画的是通过概率分布q来表达概率分布p的困难程度。p代表正确答案,q代表预测值。刻画的是两个概率分布的距离。交叉熵越小,概率分布越近。

Tensorflow实现交叉熵的代码如下:

cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))

其中,y_代表正确结果,y代表预测值。这行代码包含了4个不同的Tensorflow运算,通过tf.clip_by_value函数可以将一个张量中的数值限制在一个范围之内,这样可以避免一些运算错误,下面给出了tf.clip_by_value的简单样例

v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])

print tf.clip_by_value(v,2.5,4.5).eval

#输出[[2.5 2.5 3.][4. 4.5 4.5]]

从以上样例可以看出,小于2.5的数都被换成了2.5,大于4.5的数都被换成了4.5.第二个运算是tf.log函数,这个函数完成了对张量中所有元素依次求对数的功能。代码如下:

v=tf.constant([1.0,2.0,3.0])
print tf.log(v).eval()
#输出[0.  0.69314718   1.09861231]

下面代码展示了tf.reduce_mean函数的使用方法

v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
print tf.reduce_mean(v).eval()

因为交叉熵一般会与softmax回归一起使用,所以Tensorflow对这两个功能进行了封装,函数为tf.nn.softmax_cross_entropy_with_logits函数,可以通过以下代码实现softmax回归之后的交叉熵损失函数:

cross_entropy=tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)

其中y代表原始神经网络的输出结果,y_给出了标准答案。这样通过一个命令就可以使用softmax回归之后的交叉熵。

与分类问题不同,回归问题解决的是对具体数值的预测。例如房价预测、销量预测等。这些问题需要预测的不是一个实现定义好的类别,而是一个任意实数。解决回归问题的神经网络一般只有一个输出点,这个节点就是预测值。最常用的损失函数是均方无误差(MES),定义公式如下:

其中yi为一个batch第i个数据的正确答案,而yi‘为神经网络给出的预测结果,下面代码实现了如何通过Tensorflow实现均方误差:

mes=tf.reduce_mean(tf.square(y_-y))

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值