TensorFlow入门(二十、损失函数)

损失函数

        损失函数用真实值与预测值的距离指导模型的收敛方向,是网络学习质量的关键。不管是什么样的网络结构,如果使用的损失函数不正确,最终训练出的模型一定是不正确的。常见的两类损失函数为:①均值平方差②交叉熵

均值平方差

        均值平方差(Mean Squared Error,MSE),也称"均方误差",在神经网络中主要用于表达预测值与真实值之间的差异,针对的是回归问题。其数学计算公式如下:

                                

        可以看出,均值平方差是对每一个真实值与预测值相减后的差的平方取平均值。在具体模型中,它的值越小,表明模型越好。除此之外,类似的损失算法还有均方根误差RMSE(即将MSE开平方)、平均绝对值误差MAD(对一个真实值与预测值相减的绝对值取平均值)等。

        注意 : 在神经网络计算时,预测值要和真实值控制在同样的数据分布内,例如将预测值经过Sigmoid激活函数得到的值控制在0~1之间,那么真实值也需要归一化在0~1之间。这样,进行loss计算时才会有较好的效果。

        在TensorFlow中,没有提供单独的MSE函数。由于公式简单,可以自己组合,例如:

MSE = tf.reduce_mean(tf.pow(tf.sub(logits,outputs),2.0))

        其中,logits代表标签值,即真实值,outputs代表预测值。

        同理,均方根误差RMSE和平均绝对值误差MAD也可以手动组合,例如:

RMSE = tf.sqrt(tf.reduce_mean(tf.pow(tf.sub(logits,outputs),2.0)))
MAD = tf.reduce_mean(tf.complex_abs(tf.sub(logits,outputs)))

交叉熵

        交叉熵(crossentropy),一般针对的是分类问题,主要用于预测输入样本属于某一类的概率。其数学计算公式如下:

                        

        其中y代表真实值分类(0或1),a代表预测值。

        注意 : 用于计算的a也是通过分布统一化处理的(或者是经过Sigmoid函数激活的),取值范围在0~1之间。如果真实值和预测值都是1,前面一项y*ln(a)就是1*ln(1)等于0,后一项(1-y)*ln(1-a)也就是0*ln(0)等于0,loss为0,反之loss函数为其他数。

        在TensorFlow中常见的交叉熵函数有:

                ①Sigmoid交叉熵

                        Sigmoid交叉熵,即tf.nn.sigmoid_cross_entropy_with_logits(_sentinel = None,labels = None,logits = None,name = None),该函数对logits计算sigmoid的交叉熵。logits是神经网络模型中的w*x矩阵,也是神经网络最后一层的输出,还没有经过sigmoid激活函数计算,而labels是实际的标签值,它的shape和logits相同。

                        具体计算公式如下:

                

                ②softmax交叉熵

                        softmax交叉熵,即tf.nn.softmax_cross_entropy_with_logits(logits,labels,name = None),该函数的参数logits和labels,与Sigmoid交叉熵函数的一样。函数的计算过程一共分为两步:

                                ①将logits通过softmax计算转换成概率,公式如下:

                                        

                                ②计算交叉熵损失,把softmax的输出向量[y1,y2,y3...]和样本的实际标签做一个交叉熵,公式如下:

                                        

                                        其中,y'i指代实际的标签中第i个的值,yi是上一步softmax的输出向量[y1,y2,y3...]中,第i个元素的值。非常明显,预测越准确,计算得出的值越小,最后再通过求平均值,得到最终的loss。注意:该函数的返回值是一个向量,不是一个数。

                ③sparse交叉熵

                        sparse交叉熵,即tf.nn.sparse_softmax_cross_entropy_with_logits(logits,labels,name = None),该函数用于计算logits和labels之间的稀疏softmax交叉熵。计算流程和softmax交叉熵一样,区别在于sparse交叉熵的样本真实值与预测结果不需要one-hot编码,但是要求分类的个数一定要从0开始。比如,如果分两类,标签的预测值只有0和1两个数。如果是五类,预测值有0,1,2,3,4共五个数。

                ④加权Sigmoid交叉熵

                        加权Sigmoid交叉熵,即tf.nn.weighted_cross_entropy_with_logits(targets,logits,pos_weight,name = None),该函数用于计算加权交叉熵。计算方式与Sigmoid交叉熵基本一样,只是加上了权重的功能,是计算具有权重的Sigmoid交叉熵函数。

                        计算公式如下:

  

                        使用时,直接调用对应的API即可。

小结

        在实际的模型训练过程中,损失函数的选取取决于输入标签数据的类型:如果输入的是实数、无界的值,损失函数使用平方差;如果输入标签是位矢量(分类标志),使用交叉熵会更合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/155250.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue思考题_01v-for与v-if的优先级谁更高

目录 vue2vue3 官方文档上说不推荐将v-for与v-if在同一个标签上使用&#xff0c;因为两者优先级并不明显。 那么到底是那个指令的优先级比较高呢&#xff1f; 在vue2与vue3中答案是相反的。 vue2 在vue2中将2个指令放在同一个标签上 <template><ul><li v-fo…

Vue3中reactive, onMounted, ref,toRaw,conmpted 使用方法

import { reactive, onMounted, ref,toRaw,conmpted } from vue; vue3中 reactive &#xff0c;ref &#xff0c; toRaw&#xff0c;watch&#xff0c;conmpted 用法 toRaw 返回原响应式对象 用法&#xff1a; const rowList toRaw(row) reactive:ref: ref和reactive都是V…

关于链表指针的深刻理解

以下列代码为例 //终于给我搞清楚指针的指向究竟是怎么看的了// 按编号对职工记录进行递增排序 void sortById(List* list) {Employee* p, * q, * tail NULL;// tail 变量则是一个边界指针&#xff0c;初始值为 NULL。while (list->head->next ! tail) // tail 变量则是…

【通信系列 1 -- GSM 和 LTE】

文章目录 1. LTE(Long Term Evolution)1.1 FDD&TDD简介1.1.1 3G与4G差异1.1.2 频点与band关系1.1.3 band 与运营商的关系 1.2 TDD&FDD区别1.2.1 FDD帧结构1.2.2 TDD帧结构1.2.3 TDD&FDD优势对比1.2.4 TDD缺点 1.3 VoLTE1.3.1 VoLTE 优点11.3.2 VoLTE 优点21.3.3 Vo…

【ARM Coresight 系列文章19 -- Performance Monitoring Unit(性能监测单元)

文章目录 1.1 PMU 介绍1.2 PMU 寄存器1.2.1 PMU 管理寄存器1.2.2 PMU 外设识别寄存器1.2.3 PMU 组件识别寄存器1.3 性能监控事件1.3.1 Cortex-A9 特定事件1.1 PMU 介绍 许多体系结构都包含 PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件…

MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从

3.分库分表 3.1 介绍 3.1.1 问题分析 使用单个数据库存储所有的数据&#xff0c;如果磁盘和内存和内存不足了可以增大磁盘和内存&#xff0c;但是对于一台服务器的磁盘和内存不可能无限制的扩张下去&#xff0c;它是受我们服务器的硬件影响的&#xff0c;如果说数据库所存储…

mp4音视频分离技术

文章目录 问题描述一、分离MP3二、分离无声音的MP4三、结果 问题描述 MP4视频想拆分成一个MP3音频和一个无声音的MP4文件 一、分离MP3 ffmpeg -i C:\Users\Administrator\Desktop\一个文件夹\我在财神殿里长跪不起_完整版MV.mp4 -vn C:\Users\Administrator\Desktop\一个文件…

机器学习之自训练协同训练

前言 监督学习往往需要大量的标注数据&#xff0c; 而标注数据的成本比较高 &#xff0e; 因此 &#xff0c; 利用大量的无标注数据来提高监督学习的效果有着十分重要的意义&#xff0e; 这种利用少量标注数据和大量无标注数据进行学习的方式称为 半监督学习 &#xff08; Semi…

Java进击框架:Spring-Bean初始化过程(五)

Java进击框架&#xff1a;Spring-Bean初始化过程&#xff08;五&#xff09; 前言源码初始化配置加载Bean加载Bean对象加载Bean切面 Bean工厂后置处理器注册Bean后置处理器初始化消息源初始化应用程序事件多播器注册监听器完成Bean工厂初始化Bean初始化完成刷新应用上下文创建完…

VSCODE+PHP8.2配置踩坑记录

VSCODEPHP8.2配置踩坑记录 – WhiteNights Site 我配置过的最恶心的环境之一&#xff1a;windows上的php。另一个是我centos服务器上的php。 进不了断点 端口配置和xdebug的安装 这个应该是最常见的问题了。从网上下载完php并解压到本地&#xff0c;打开vscode&#xff0c;安装…

【网路安全 --- Linux,window常用命令】网络安全领域,Linux和Windows常用命令,记住这些就够了,收藏起来学习吧!!

一&#xff0c;Linux 1-1 重要文件目录 1-1-1 系统运行级别 /etc/inittab 1-1-2 开机启动配置文件 /etc/rc.local /etc/rc.d/rc[0~6].d## 当我们需要开机启动自己的脚本时&#xff0c;只需要将可执行脚本丢在 /etc/init.d 目录下&#xff0c;然后在 /etc/rc.d/rc*.d 中建…

XLSX.utils.sheet_to_json() 数字格式转为字符串格式

raw 默认为true&#xff0c;设置为false就可以了 XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {raw:false})

Maven NetBeans

目录 在 NetBeans 里打开一个 Maven 项目 在 NetBeans 里构建一个 Maven 项目 在 NetBeans 里运行应用程序 NetBeans 6.7 及更新的版本已经内置了 Maven。对于以前的版本&#xff0c;可在插件管理中心获取 Maven 插件。此例中我们使用的是 NetBeans 6.9。 关于 NetBeans 的一…

竹云筑基,量子加密| 竹云携手国盾量子构建量子身份安全防护体系

9月23日-24日&#xff0c;2023量子产业大会在安徽合肥举行。作为量子科技领域行业盛会&#xff0c;2023年量子产业大会以“协同创新 量点未来”为主题&#xff0c;展示了前沿的量子信息技术、产业创新成果&#xff0c;并举办主旨论坛、量子科普讲座等系列专项活动。量子信息作为…

PDMS二次开发(二十一)——关于Pipeline工具生成螺栓材料表的计算思路

目录 1.简述2.螺栓元件的数据2.1 A1A等级中螺栓元件库2.2 A1A等级中法兰元件库2.3 A1A要指定螺栓等级2.4 螺栓等级数据解析 3.问题解释 1.简述 因为有好几个网友问到螺栓材料表生成报错的问题&#xff0c;我初步分析可能还是因为螺栓元件库的问题&#xff0c;我这里对Pipeline…

Spark入门

Spark 1.Spark概述 2.Spark特点 3.RDD概述 1. Spark概述 什么是Spark 回顾&#xff1a;Hadoop主要解决&#xff0c;海量数据的存储和海量数据的分析计算。 Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Hadoop与Spark历史 Hadoop与Spark框架对比 Dr…

内网渗透面试问题

文章目录 1、熟悉哪些域渗透的手段2、详细说明哈希传递的攻击原理NTLM认证流程哈希传递 3、聊一下黄金票据和白银票据4、shiro反序列化漏洞的形成原因&#xff0c;尝试使用burp抓包查看返回包内容安装环境漏洞验证 5、log4j组件的命令执行漏洞是如何造成的6、画图描述Kerberos协…

9-AJAX-上-原理详解

一、定义 1、什么是Ajax Ajax&#xff1a;即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网页的技术。通过在后台与进行少量数据交换&#xff0c;Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。而传统的…

时代风口中的Web3.0基建平台,重新定义Web3.0!

近年来&#xff0c;Web3.0概念的广泛兴起&#xff0c;给加密行业带来了崭新的叙事方式&#xff0c;同时也为加密行业提供了更加具有想象力的应用场景与商业空间&#xff0c;并让越来越多的行业从业者们意识到只有更大众化的市场共性需求才能推动加密市场的持续繁荣。当前围绕这…

【物联网】Arduino+ESP8266物联网开发(一):开发环境搭建 安装Arduino和驱动

ESP8266物联网开发 【物联网】ArduinoESP8266开发环境配置 1.开发环境安装 开发软件下载地址&#xff1a; 链接: https://pan.baidu.com/s/1BaOY7kWTvh4Obobj64OHyA?pwd3qv8 提取码: 3qv8 1.1 安装驱动 将ESP8266连接到电脑上&#xff0c;安装ESP8266驱动CP210x 安装成功后&…