| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> tf.keras.losses函数参数(from_logits、label_smoothing...) -> 正文阅读 |
|
[人工智能]tf.keras.losses函数参数(from_logits、label_smoothing...) |
tf.keras.losses实例是用来计算真实标签( y_true )和预测标签之间( y_pred )的Loss损失。 参数 from_logits是否将 y_pred 解释为 logit 值的张量。 默认情况下,假设 y_pred 包含概率(即 [0, 1] 中的值)。即默认情况下from_logits的值为False 解释一下logit值的含义:逻辑回归一般将因变量二分类变量的0-1转变为频率[0,1]也就是分类为1的概率,进而变成优势比odds( odds=P/(1-P) ,[0,+∞] ),然后log一下成为Logit值( 即?Logit=log(odds) ),值域为?[-∞,+∞]?),于是可以理解有时候我们遇到的 y_pred标签值为一些[0,1]之外的无穷大的数。例如:
以P为因变量的Logit函数,反过来求概率P的反函数即为sigmoid函数(sigmoid(x)=1/1+e^(-x) ,即概率P=1/1+e^(-Logit) )。 在二分类中sigmoid函数较为常用,softmax函数常用于多分类任务。 对于多标签输入softmax函数能保证它们的映射之和为1,而sigmoid函数不能保证。 label_smoothing即标签平滑,是一种正则化方法,用于分类问题,防止模型在训练时过拟合,改善泛化能力差的问题。 那么为什么需要标签平滑呢?以二分类为例,设训练数据为形如(x,y)的集合,其中x为数据,y为真实标签( y_true ),p(x)指预测标签 (y_pred) 即预测的概率,一般情况下真实标签( y_true )已经标注好样本所属类别
以BinaryCrossentropy损失函数为例,N代表样本的大小,如上代码中N=4: 在训练期间,对于这些训练数据对应的 y_true 标签不能保证完全正确,如果恰好该样本的 y_true是错的,训练就会对模型产生消极影响。 不做出处理的话,这样的标签计算对于样本而言,无论属于类0还是1,都只计算了一种情况,就是说这样鼓励模型目标类别的概率趋近于1,非目标类别的概率趋近0。但事实上这样做产生的消极影响会模型过分自信的相信原训练数据集,遇到训练数据中没有覆盖的数据时,就无从下手,导致网络过拟合,泛化能力差。 为了处理这种情况,我们以1-α的概率认为原样本是对的,以α的概率认为原样本是错的(即α的概率(x,1-y)是对的)。 1-α的概率与(x,y)相同,即loss计算公式与上相同 有α的概率不同(即α的概率(x,1-y)是对的,将1-y取代y代入公式)。则公式为 将两个式子进行概率的加权 令 则 可以看到,和原公式相比,仅有?替换了?。y的值为0或1,则: 即将标签0和1转换为α和1-α,以上是标签平滑的基本思路。未平滑前,模型预测输出尽可能逼近0或1,这个过程可以说是过拟合,正则化就是平滑后的处理,平滑后模型预测输出尽可能逼近α或1-α,逼近后不再向0或1逼近优化,即不再极端化。注意:这里的α并不是label_smoothing值的大小,继续往下看。 在二分类中,计算损失时考虑到了每个样本属于0和1两种类别的情况,即 前面的是属于0类的情况 后面的是属于1类的情况 暂且将这样写,其中f(p(x))是不同的Loss函数对应的函数,k指的是类别数目 损失函数Loss可以表示为 你可能会问二元交叉熵对应的概率α是清楚的,那多元的呢?
TensorFlow中,官方API这样说:如果 label_smoothing为 0.1,则对非目标标签使用 0.1 / num_classes,对目标标签使用 0.9 + 0.1 / num_classes。这是Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.),是以均匀分布为前提,采取的概率公式是这样的:
同理,也满足二分类的情况,即β=2α时 下面用代码实验一下:
有兄弟可能会问,在预测标签 y_pred 中第三类[0.05, 0.95, 0]中的0,计算log时怎么办,这个情况似乎是TensorFlow以一个极小的正数代替了0,如使用0.000001(我也不清楚,瞎猜的,代入公式推算是正确的)。
标签平滑后相当于在真实分布中加入了噪声,避免模型对于正确标签过于自信,使得预测正负样本的输出值差别不那么大,从而避免过拟合,提高模型的泛化能力。 axis计算loss的轴(特征轴)。 默认为 -1(-1表示为最后一个维度)。 reduction适用于损失的 tf.keras.losses.Reduction 类型。 默认值为AUTO。一共AUTO、NONE、SUM、SUM_OVER_BATCH_SIZE四种值
当与 tf.distribute.Strategy 一起使用时,在 tf.keras compile and fit 等内置训练循环之外,使用 AUTO 或 SUM_OVER_BATCH_SIZE 将引发错误。 name操作的名称。 即使用的Loss函数名称。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/1 12:30:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |