Tensorflow深度学习实战之(九)--损失函数

本文详细介绍了在TensorFlow 2.6.2环境下,使用GPU和CUDA 11.6进行实验,探讨了分类问题中的softmax和交叉熵损失函数,以及回归问题中的均方误差损失函数。对于多分类任务,softmax将神经网络输出转换为概率分布,交叉熵衡量预测与真实值的差距;回归任务中,均方误差作为损失函数用于数值预测的准确性评估。
摘要由CSDN通过智能技术生成

本文是在GPU版本的Tensorflow = 2.6.2 , 英伟达显卡驱动CUDA版本 =11.6,Python版本 = 3.6, 显卡为3060的环境下进行验证实验的!!!


一、分类问题损失函数

1.softmax处理分类问题

在神经网络中通过实际计算出的值与真实值之间存在差异,该差异称之为损失函数,它是衡量神经网络学习质量的关键,如果损失函数定义的不正确无论什么样的神经网络结构,最终都将难以训练出正确的网路模型。
对于传统二分类问题,可以设定输出层只有一个节点,设定阈值确定待测预测样本的分类,但是对于多分类问题,通常的做法是设置n个输出节点(n为类别的个数),运用softmax方法的解决多分类问题。
softmax处理分类问题softmax只是神经网络中的一层额外的处理层,将神经网络的输出变成一个概率分布,实质是将输出的原始结果进行归一化操作,假设原始的神经网络输出为y1,y2,…,yn,那么经过softmax回归处理之后的输出为:
softmax处理机制softmax处理结果示意图

2.softmax函数形式

Tensorflow函数提供了对softmax的支持,其函数形式如下:

tf.nn.softmax(logits, name=None),计算对原始输出层的softmax
tf.nn.log_softmax(logits, name=None),首先计算原始输出层的softmax,然后对softmax取其对数。

定义一个张量,通过softmax输出属于各个类别的概率。

import tensorflow.compat.v1 as tf
tf.disable_eager_execution()

s = tf.constant([1,1,2,3,4,5,10], dtype=tf.float32)
sm = tf.nn.softmax(s)
with tf.Session() as sess:
 print(sess.run(sm))

输出结果为:

[1.2210199e-04 1.2210199e-04 3.3190762e-04 9.0221845e-04 2.4524841e-03
 6.6665425e-03 9.8940265e-01]

3.交叉熵损失函数

交叉熵刻画的是实际输出概率与输出概率之间的距离,也就是交叉熵的值越小两个概率分布的就越接近其表达式如下:
交叉熵损失函数公式
其中p(x)代表某个样例的正确答案,而q(x)则代表着经过softmax回归之后的预测答案,经过上式的计算即刻得到预测值与真实值之间的交叉熵的值。Tensorflow提供的交叉熵损失函数代码如下:

cross_entropy = -tf.reduce.mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
其中y_表示正确答案,y表示预测结果。tf.clip_by_value(A, min, max)表示输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max。

计算两个张量之间的交叉熵,并将交叉熵结果输出。

import tensorflow.compat.v1 as tf
tf.disable_eager_execution()

input_data = tf.Variable([[0.2, 0.1, 0.9], [0.3, 0.4, 0.6]], dtype=tf.float32)
labels = tf.constant([[1, 0, 0], [0, 1, 0]], dtype=tf.float32)
cross_entropy = -tf.reduce_mean(labels * tf.log(tf.clip_by_value(input_data, 1e-10, 1.0)))
with tf.Session() as sess:
 init = tf.global_variables_initializer()
 sess.run(init)
 print(sess.run(cross_entropy))

输出结果为:

0.4209548

二、回归问题损失函数

与分类问题不同,回归问题解决的是对具体数值的预测。比如房价预测、销量预测等都是回归问题。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数,常常使用均方误差损失函数。
均方误差函数
其中 yi 为一个batch中的第i个数据的正确答案,而 yi’ 为神经网络给出的预测值,Tensorflow提供的交叉熵损失函数代码如下:

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

通过定义两个张量,计算两者之间的均方误差。

import tensorflow.compat.v1 as tf
tf.disable_eager_execution()

a = tf.constant([[4.0, 4.0, 4.0], [3.0, 3.0, 3.0], [1.0, 1.0, 1.0]])
b = tf.constant([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [2.0, 2.0, 2.0]])
mse = tf.reduce_mean(tf.square(a - b))
with tf.Session() as sess:
 print(sess.run(mse))

输出结果为:

4.6666665
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值