Tensorflow误差计算

1. 均方误差计算

均方差(Mean Squared Error,简称 MSE)误差函数把输出向量和真实向量映射到笛卡尔 坐标系的两个点上,通过计算这两个点之间的欧式距离(准确地说是欧式距离的平方)来衡 量两个向量之间的差距。

MSE(y, o) = \tfrac{1}{d_{out}}\sum _{I = 1}^{d_{out}}(y_{I} - o_{i})^2

MSE(y, o) = \tfrac{1}{d_{out}}\sum _{I = 1}^{d_{out}}(y_{I} - o_{i})^2

均方差误差函数广泛应用在回归问题中,实际上,分类问题中也可以应用均方差误差 函数。在 TensorFlow 中,可以通过函数方式或层方式实现 MSE 误差计算。例如,使用函 数方式实现 MSE 计算,代码如下:

特别要注意的是,MSE 函数返回的是每个样本的均方差,需要在样本维度上再次平均来获 得平均样本的均方差,实现如下:

o = tf.random.normal([2,10]) # 构造网络输出 
y_onehot = tf.constant([1,3]) # 构造真实值
y_onehot = tf.one_hot(y_onehot, depth=10)
loss = keras.losses.MSE(y_onehot, o) # 计算均方差
loss
<tf.Tensor: id=282, shape=(2,), dtype=float32, numpy=array([1.6341051, 1.5467541], dtype=float32)>
loss = tf.reduce_mean(loss)
<tf.Tensor: id=284, shape=(), dtype=float32, numpy=1.5904295>

2. 交叉熵误差函数

熵在信 息学科中也叫信息熵,或者香农熵。熵越大,代表不确定性越大,信息量也就越大。某个 分布𝑃(𝑖)的熵定义为

H(i) = -\sum _{i}P(i)log_{2}P(i)

H(i) = -\sum _{i}P(i)log_{2}P(i)

如果它预测的概率分布是[0.1,0.1,0.1,0.7],它的熵可以计算为:

−0.1 ∙ log2 0.1 − 0.1 ∙ log2 0.1 − 0.1 ∙ log2 0.1 − 0.7 ∙ log2 0.7 ≈ 1.356

这种情况比前面确定性类别的例子的确定性要稍微大点。

在介绍完熵的概念后,我们基于熵引出交叉熵(Cross Entropy)的定义:

H(p||q) = -\sum _{I}p(i)log_{2}q(i)

H(p||q) = -\sum _{I}p(i)log_{2}q(i)

通过变换,交叉熵可以分解为𝑝的熵𝐻(𝑝)和𝑝与𝑞的 KL 散度(Kullback-Leibler Divergence)的 和:

H(p||q) = H(p) + D_{KL}(p||q)

H(p||q) = H(p) + D_{KL}(p||q)

D_{KL}(p||q) = \sum_{I}p(i)log(\frac{p(i)}{q(i)})

D_{KL}(p||q) = \sum_{I}p(i)log(\frac{p(i)}{q(i)})

𝑝 = 𝑞时,𝐷𝐾𝐿(𝑝||𝑞)取得最小值0,𝑝与𝑞之间的差距越大,𝐷𝐾𝐿(𝑝||𝑞)也越 大。需要注意的是,交叉熵和 KL 散度都不是对称的,即:

𝐻(𝑝||𝑞) ≠ 𝐻(𝑞||𝑝)

𝐷𝐾𝐿(𝑝||𝑞) ≠ 𝐷𝐾𝐿(𝑞||𝑝)

https://www.jianshu.com/p/23623fe17f64

建议去看看这个链接,我的感觉阐述的方向有些看不懂。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值