tf中的误差计算

tf中的误差计算


tensoflow中主要有三种误差计算方式,即均方误差(MSE),交叉熵,铰链损失函数(适用于SVM)

1. 均方误差(MSE)

  • 概念:均方误差的表达式为 l o s s = ∑ ( y − o u t ) 2 N loss = \dfrac{\sum(y-out)^2}{N} loss=N(yout)2其中N是为了更好地进行梯度下降,避免弥散和爆炸,一般取batch大小
  • 以下展现了三种军方无擦的写法,分别是按数学式实现(loss1),2范数实现(loss2),tf自带的MSE函数实现(loss3)
    在这里插入图片描述

2. 交叉熵

  • 概念:熵的数学式如下,熵代表信息量的大小(越小越不确定,信息量越大) E n t r o p y = − ∑ i p ( i ) log ⁡ p ( i ) Entropy=-\sum_{i}p(i)\log p(i) Entropy=ip(i)logp(i)交叉熵(cross entropy)的数学式如下 H ( p , q ) = − ∑ p ( x ) log ⁡ q ( x ) H(p,q)=-\sum p(x)\log q(x) H(p,q)=p(x)logq(x)其中p为输入,q为输出。当p为one_hot编码,式子化简为下式,其中q为p中1位置对应的输出概率 H ( p , q ) = − log ⁡ q i H(p,q)=-\log q_i H(p,q)=logqi
  • 交叉熵理解(不同概率下对比)
    在这里插入图片描述
  • 大部分情况(分类),输出需要经过softmax在计算损失函数,这种方法可能会存在将输出变为0的情况,因此采用tf.losses.categorical_crossentropy(y_true,y_pred,from_logits=True)其中from_logits=True表示输出结果未作softmax(推荐这种避免输出变为0的情况),from_logits=False表示输出结果已作softmax,默认为False
import tensorflow as tf

x = tf.random.normal([1, 784])
w = tf.random.normal([784, 2])
b = tf.zeros([2])
pred = x@w+b
# pred = tf.transpose(pred)
print(pred)
prob = tf.math.softmax(pred, axis=1)
# prob = tf.transpose(prob)
print(prob)
a = tf.losses.categorical_crossentropy([[0., 1.]], pred, from_logits=True)
b = tf.losses.categorical_crossentropy([[0., 1.]], prob)
print(a)
print(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值