Tensorflow(十八) —— 误差计算

本文介绍了TensorFlow中常见的误差计算方法,包括MSE(均方误差)和交叉熵损失函数(binary及categorical)。通过示例展示了它们的计算过程,并讨论了MSE的缺点,如梯度消失问题。最后,强调了在处理分类问题时直接使用logits计算交叉熵损失函数的优越性。
摘要由CSDN通过智能技术生成

1. 主要方式

1、MSE
2、cross entropy loss
3、Hinge loss
Σmax(0,1-y*h(x))

2. MSE

# ******************* MSE
y = tf.constant([0,1,3,2,1])
y = tf.cast(tf.one_hot(y,depth = 4),dtype=tf.float32)

logits = tf.random.normal([5,4])

loss1 = tf.reduce_mean(tf.square(y - logits))
print("loss1:",loss1.numpy())

loss2 = tf.square(tf.norm(y - logits))/(5*4)
print("loss2:",loss2.numpy())

loss3 = tf.losses.MSE(y,logits)
print("loss3:",loss3.shape)

loss4 = tf.reduce_mean(tf.losses.MSE(y,logits))
print("loss4:",loss4.numpy())

loss5 = tf.reduce_mean(tf.losses.MeanSquaredError()(y,logits))
print("loss5:",loss5.numpy())
"""
小写为函数
大写为类,使用前需实例化,再调用函数.__call__方法,该方法可省略不写
"""

loss6 = tf.reduce_mean(tf.losses.MeanSquaredError().__call__(y,logits))
print("loss6:",loss6.numpy())

3. cross entropy loss

# ********************* cross entropy loss
"""
Binary Classification: single output
                       multi output
"""
"""
小写为函数
大写为类
"""
# 对于二分类问题单输出的loss
y = tf.constant([1])
p = tf.constant([0.6])
loss1 = tf.losses.binary_crossentropy(y,p)
loss1_ = tf.losses.BinaryCrossentropy()(y,p)
loss1_2 = tf.losses.BinaryCrossentropy().__call__([[1],[1]],[[0.6],[0.6]])
print("loss1:",loss1.numpy(),loss1_.numpy(),loss1_2.numpy())

# 对于多输出的loss计算
loss2 = tf.losses.categorical_crossentropy([0,1,0,0,0],[0.5,0.1,0.1,0.1,0.1])
print("loss2:",loss2.numpy())

loss3 = tf.losses.CategoricalCrossentropy().__call__([0,1,0,0,0],[0.1,0.5,0.1,0.1,0.1])
print("loss3:",loss3.numpy())

loss4 = tf.losses.CategoricalCrossentropy()([0,1,0,0,0],[0.2,0.2,0.2,0.2,0.2])
print("loss4:",loss4.numpy())

loss5 = tf.losses.categorical_crossentropy([0,1,0,0,0],[0.01,0.96,0.01,0.01,0.01])
print("loss5:",loss5.numpy())

4. MSE的缺点

# ******************** why not MES
"""
1、sigmoid + MSE  => gradient vanish
2、converge slower
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.001,1,100)
y = -np.log2(x)
plt.plot(x,y)
plt.show()

5. 直接对logits计算交叉熵损失函数

"""
input => logits => softmax => crossentropy

最后两部步容易出现数据不稳定的情况 因而可以将其合为一步
"""
logits = tf.random.normal([5,4])
y = tf.one_hot([0,3,2,1,3],depth=4)

loss = tf.reduce_mean(tf.losses.categorical_crossentropy(y,logits,from_logits = True))
print("loss:",loss.numpy())

"""
推荐使用from_logits
"""

本文为参考龙龙老师的“深度学习与TensorFlow 2入门实战“课程书写的学习笔记

by CyrusMay 2022 04 17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值