经典损失函数——均方误差(MSE)和交叉熵误差(CEE)的python实现

article/2025/11/7 0:06:14

损失函数(loss function)用来表示当前的神经网络对训练数据不拟合的程度。这个损失函数有很多,但是一般使用均方误差和交叉熵误差等。

1.均方误差(mean squared error)

先来看一下表达式:

                           E=\frac{1}{2}\sum_{k}^{ }(y_{k}-t_{k})^{2}

\frac{1}{2}用于将\frac{1}{2}\sum_{k}^{ }(y_{k}-t_{k})^{2}的求导结果变成\sum_{k}^{ }(y_{k}-t_{k})y_{k}是神经网络的输出,t_{k}是训练数据的标签值,k表示数据的维度。

用python实现:

def MSE(y, t):return 0.5 * np.sum((y - t)**2)

使用这个函数来具体计算以下:

t = [0, 1, 0, 0]
y = [0.1, 0.05, 0.05, 0.8]
print(MSE(np.array(y), np.array(t)))t = [0, 1, 0, 0]
y = [0.1, 0.8, 0.05, 0.05]
print(MSE(np.array(y), np.array(t)))

输出结果为:

                                                  

这里正确标签用one-hot编码,y用softmax输出表示。第一个例子的正确标签为2,对应的概率为0.05,第二个例子对应标签为0.8.可以发现第二个例子的损失函数的值更小,和训练数据更吻合。

2.交叉熵误差(cross entropy error)

除了均方误差之外,交叉熵误差也常被用做损失函数。表达式为:

          E=-\sum_{k}^{ }(t_{k}\textrm{log}y_{k})

这里,log表示以e为底的自然对数(\mathrm{log}_{e})。y_{k}是神经网络的输出,t_{k}是训练数据的标签值。并且,t_{k}中只有正确解标签的索引为1,其他均为0(one-hot)表示。因此这个式子实际上只计算对应正确解标签的输出的自然对数。

自然对数的图像为:

                                                

所以输出的概率越大对应损失函数的值越低。

代码实现交叉熵误差:

def cross_entropy_error(y, t):delta = 1e-7return -np.sum(t * np.log(y + delta))

这里设置delta,是因为当出现log(0)时,np.log(0)会变为负无穷大。所以添加一个微小值可以防止负无穷大的发生。

还用刚刚那个例子:

t = [0, 1, 0, 0]
y = [0.1, 0.05, 0.05, 0.8]
print(cross_entropy_error(np.array(y), np.array(t)))t = [0, 1, 0, 0]
y = [0.1, 0.8, 0.05, 0.05]
print(cross_entropy_error(np.array(y), np.array(t)))

输出为:

                                                   

可以看出输出值的概率越大损失值就越小。

 

  • 交叉熵误差的改进:

前面介绍了损失函数的实现都是针对单个数据。如果要求所有训练数据的损失函数的总和,以交叉熵为例,可以写成下面的式子:

                                            E=-\frac{1}{N}\sum_{n}^{ }\sum_{k}^{ }(t_{nk}\textrm{log}y_{nk})

这里,假设数据有N个,t_{nk}表示第n个数据的第k个元素的值。式子虽然看起来复杂,其实只是把求单个数据的损失函数扩大到了N份数据,不过最后要除以N进行正规化。

通过除以N,可以求单个数据的“平均损失函数”。通过这样的平均化,可以获得和训练数据的数量无关的统一指标。比如,即使训练数据有100或1000个,也可以求得单个数据的平均损失函数。

所以对之前计算单个数据交叉熵进行改进,可以同时处理单个数据和批量数据:

def cross_entropy_error(y, t):if y.ndim == 1:t = t.reshape(1, t.size)y = y.reshape(1, y.size)batch_size = y.shape[0]delta = 1e-7return -np.sum(t * np.log(y + delta)) / batch_size

但是,对于训练数据不是one-hot表示,而是普通标签表示怎么办呢(例如一批处理5个数据的标签值为[2,5,7,3,4])。输出的数组是5行N列的,这里以手写数字识别为例所以N=10。所以我们计算的交叉熵误差其实计算的是对应每一行,其中某一列的对数之和。例如标签值[2,5,7,3,4],选择的是输出结果的第一行第2个,第二行第5个,第三行第7个...可能表达的不是很清楚,看下代码实现应该好多了。

def cross_entropy_error(y, t):if y.ndim == 1:t = t.reshape(1, t.size)y = y.reshape(1, y.size)batch_size = y.shape[0]delta = 1e-7return -np.sum(np.log(y[np.arange(batch_size), t] + delta)) / batch_size

也就是说,这里的标签值是作为输出数组的索引,用于定位。

 

 

 

 

 


http://chatgpt.dhexx.cn/article/QBmtJwDW.shtml

相关文章

Tensorflow2.0 MSE(均方误差)和 Cross Entropy(交叉熵)

什么是MSE? 参数估计中均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE MSE(均方误差)在深度学习中主要用来求损失函数,既真实值和预测值之间的误差。 公式中的y是真实值,out是你计算出来的值…

分类问题可以使用MSE(均方误差)作为损失函数吗

一、. 从损失函数公式本身来说 1. 从损失函数公式的物理含义来说 MSE衡量的是预测值和目标值的欧式距离。 而交叉熵是一个信息论的概念,交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之…

计算机公式计算误差,如何在Excel2016中计算方差和均方误差?

在Excel表中,有时需要计算方差,然后根据此图绘制图表,目标值指示偏差程度,然后如何计算方差? 方差的概念 方差是每个数据与平均值之间差异的平方和的平均值. 在概率论和数理统计中,方差(英语方差)用于衡量随…

残差、方差、偏差、MSE均方误差、Bagging、Boosting、过拟合欠拟合和交叉验证

文章目录 一、残差、方差、偏差 1.1 残差统计概念1.2 方差、标准差1.3 偏差1.4 残差、方差、偏差总结1.5 MSE、RMSE、MAE1.6 代码实现 二、Bagging和Boosting的区别 2.1 基本介绍2.2 Bagging:2.3 Boosting:2.4 Bagging,Boosting二者之间的区别 三、过拟合…

线性回归均方误差(MSE)的推导

刚开始学习机器学习的时候就接触了均方误差(MSE,Mean Squared Error),当时就有疑惑,这个式子是怎么推导的,但是因为懒没有深究。今天看到了唐宇迪老师的机器学习课程,终于理解他是怎么推导的了。…

【代价函数】MSE:均方误差(L2 loss)

MSE均方误差(L2 loss) 1.代码展示MAE和MSE图片特性 import tensorflow as tf import matplotlib.pyplot as plt sess tf.Session() x_val tf.linspace(-1.,-1.,500) target tf.constant(0.)#计算L2_loss l2_y_val tf.square(target - x_val) l2_y_…

MAE平均绝对误差和MSE均方误差

MAE:Mean absolute error是绝对误差的平均值,能更好的反映预测值误差的实际情况 其中,f_i表示预测值,g_i表示真实值 缺点:若本身真实值就比较大,比如真实值1万,预测值9000,但mae100…

mse均方误差计算公式_视觉SLAM十四讲实践之真实轨迹和估计轨迹均方根误差

为了理解RMSE首先介绍一些统计学的概念,然后介绍SLAM领域里面的计算精度ATE和RPE的用法。 中位数 一组数据按大小顺序排列,位于最中间的一个数据 (当有偶数个数据时,为最中间两个数据的平均数) 叫做这组数据的中位数。 用中位数作为一组数据的代表,可靠性不高,但受极端数据…

通俗易懂讲解均方误差 (MSE)

测量预测值Ŷ与某些真实值匹配程度。MSE 通常用作回归问题的损失函数。例如,根据其属性估算公寓的价格。 这是维基百科中定义的均方误差 (MSE) 公式。它代表了一个非常简单的概念,但如果您刚开始使用 ML,可能不太容易读懂。 让我们从内而外拆…

图像处理之图像质量评价指标MSE(均方误差)

一、MSE基本定义 MSE全称为“Mean Square Error”,中文意思即为均方误差,是衡量图像质量的指标之一。计算原理为真实值与预测值的差值的平方然后求和再平均,公式如下: 其中, M为图像I的像素总数,N为图像K…

损失函数——均方误差(Mean Squared Error,MSE)

均方误差(Mean Squared Error,MSE):MSE是回归任务中常用的损失函数,它衡量模型预测值与实际值之间的平均平方误差。 具体来说,MSE的计算公式如下: 其中,n是样本数量,xi是…

已解决OSError: [WinError 6] 句柄无效。

已解决Exception ignored in: <bound method Popen.__del__ of <subprocess.Popen object at 0x00000194C27C4BE0>> Traceback (most recent call last): File “D:\ProgramData\Anaconda3\lib\subprocess.py”, line 768, in __del__ self._internal_poll(_deadst…

解决OSError: [Errno 98] Address already in use问题

学习python socket编程&#xff0c;运行服务器端时报错OSError: [Errno 98] Address already in use 1、使用命令sudo netstat -tunlp 查看绑定正在使用的端口号&#xff0c;可以看到12345端口号被963进程占用&#xff0c;这里需要加上sudo或者切换到管理员用户运行&#xff0…

oserror: .txt not found 解决方案

oserror: .txt not found 解决方案 等我彻底上手了我一定要做一个最最最适合新手菜鸟的教程啊啊啊 学习的过程真是踩坑无数啊 归根结底还是因为菜&#xff0c;使用习惯不好 说正事&#xff0c;最初用pytorch的时候访问txt文件&#xff0c;提示找不到文件或者路径&#xff0…

报错OSError: [Errno 22] Invalid argument 的一种解决方法

今天写作业的时候突然读不了txt文件了&#xff0c;查了很多地方&#xff0c;已开始写相对路径之后显示的是如下报错&#xff0c;仔细检查之后并没有发现代码问题。 查找资料仔细检查之后依旧无法解决&#xff0c;决定改用写绝对路径。 填写绝对路径时又报了如下错误&#xff1…

OSError[Errno 48]:Address already in use解决方法

Python flask OSError[Errno 48]:Address already in use 建立Flask项目filename.py后&#xff0c;运行该项目&#xff0c;报错内容如下&#xff1a; 意思是地址已被使用&#xff0c;搜索相关问题后发现是因为&#xff0c;你曾启动过相同或者类似的服务占用了这个端口&#x…

Python报错:OSError: cannot open resource

Python报错&#xff1a;OSError: cannot open resource 今天借助Python第三方库写了一个简单的生成词云的编程&#xff0c;但在使用wordcloud生成词云过程中&#xff0c;出现了OSError: cannot open resource错误&#xff0c;通过断点调试并查看了一些网上的解决方法 找到了原因…

【解决】OSError: cannot write mode F as PNG

问题: 将图像所表示的矩阵转换为图像并保存为 png 格式时报错: OSError: cannot write mode F as PNG&#xff0c;报错信息如下: 原因分析: 这里的 mode F 意思是图像中浮点类型的像素值&#xff0c;原因是我代码中的 img 数组是 float 类型的&#xff0c;而图像中每个像素的…

出现Python OSError: [Errno 22] Invalid argument的来龙去脉

参考解决办法&#xff1a;https://blog.csdn.net/weixin_44952395/article/details/105289460 问题描述&#xff1a; 今天我在读取文本文档txt内的文件路劲时总是报错&#xff0c;如下图所示 上网找了好几种解决办法&#xff0c;其中我在本文开头所述的参考办法比较有用。 发…

彻底解决 OSError: [WinError 127] 找不到指定的程序。

原创文章&#xff0c;转载请注明出处&#xff01; 在使用pip安装torch_geometric包时&#xff0c;运行时会发现报错&#xff1a; ModuleNotFoundError: No module named torch_sparse 于是当我又装了torch_sparse时&#xff0c;发现报错&#xff1a; OSError: [WinError 127…