包含损失函数曲线python代码的词条

代价函数(python实现)

首先我们要知道ℎ????(????(????))等于什么,它的意思是θ^T乘以X,X是一个向量,如果用等式表达的话就是 θ0????0 + θ1????1 + θ2????2+...+θ???????????? ,当然θ也是一个向量,而且是一维的,python里面有一个库叫numpy,专门做矩阵运算的,我们使用就可以了,我们先初始化X,y,还有θ吧

创新互联是专业的柯坪网站建设公司,柯坪接单;提供做网站、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行柯坪网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

先随机初始化,这些东西应该不需要讲,randint是随机整数,rand是小数,然后low参数代表你的随机数上界,size就是维度,初始化完成后就开始运算。

求和公式里面的运算

( (h(θ) = X theta^T) - y )^2*

我想这些应该不难,就是(X * theta.T - y),平方的话用np的power()函数。

inner = np.power((X * theta.T - y),2),第二个参数就是平方数

然后我们就可以计算求和公式外面的了,这个m代表着X矩阵的行数,对应的就是X的

向量个数,

np.sum(inner,axis=None)

最后再除以两倍的x向量个数即可,就是1 / len(X) * 2为什么是两倍呢,因为它求了偏导数,所以就是2了,好了,把它们整理一下写成函数吧

Python如何画函数的曲线

输入以下代码导入我们用到的函数库。

import numpy as np

import matplotlib.pyplot as plt

x=np.arange(0,5,0.1);

y=np.sin(x);

plt.plot(x,y)

采用刚才代码后有可能无法显示下图,然后在输入以下代码就可以了:

plt.show()

yolov5 代码解读 损失函数 loss.py

把one-hot label 转换为soft label,一般认为这样更容易work。

self.loss_fcn = nn.BCEWithLogitsLoss(reduction='none') # must be nn.BCEWithLogitsLoss()

这里reduction用none因为在forward里返回的时候取mean。

刚开始看这几行非常confused,查了很久。

这个issue里说减少false negative的影响,我觉得应该写错了,是减少false positive的影响。

false negative指gt有框而network没有predict到,这时候的weight应该要比较大才对。

,当 ,即 时,alpha_factor=0,这应该是false positive的情况。

直白的说,network觉得这里有一个obj,但是gt说没有,这种情况不应该过多的惩罚。

如果采用绝对值的话,会减轻pred和gt差异过大造成的影响。

假设gt是1,pred_prob如果很小,那么就是hard,这样算出来的p_t也会小,最后modulating_factor大。

对alpha_factor也是类似的。alpha_factor对应于foreground,一般设置为0.25。

这里modulating_factor的算法和QFL论文写的一致。

原本FL用class label,也就是one-hot discrete label来supervise;而QFL将其换成了IoU continuous label。

我们先明确一下p和targets的shape

p,也就是prediction,[num_dec_layer, batch_size, num_anchor, height, width, 85],这里85是80个class和4个offset以及1个confidence。

targets [nt, 6]

BCEcls, BCEobj是两个criteria,在scratch的hyp中g=0所以没有用focal loss,是普通的BCEloss

cp 和 cn 是soft label的probability,比如0.95 0.05。

balance控制obj loss的加权系数,autobalance决定加权系数也就是balance是否自动更新,autobalance一般是False。

self.balance = {3: [4.0, 1.0, 0.4]} ,有三个layer的输出,第一个layer的weight是4,第二个1,以此类推。如果有5个layer的输出才用右边那个weight数组。

gr 是iou ratio。

targets就是这个batch里所有的labels,targets(img_idx, cls_idx, x, y, w, h),shape为[nt, 6]。可参考utils/datasets.py line 522, 599。

随便打印几行targets也可以验证我们的分析。

x, y, w, h是归一化后的结果。

先复制了三份一样的targets,在最后面加了一维表明anchor idx,本来是6现在变成7。

gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain t = targets * gain 这里是把 grid size 拿出来乘,恢复到特征图的维度。

在 match 里面比较简单,容易看懂,就是 anchor 和 target 不能差的太离谱,误差小于阈值就 match。

下一步在扩展 targets,个人认为是 positive examples 太少了,所以根据 center 在 cell 中的相对位置,添加相邻的两个 cell 作为 targets。

举个例子,如果 center 在 cell 的左上角,那么 cell 本身,和 cell 的左边一个位置,还有 cell 的上边一个位置,这三个 cell 都作为 targets。

我个人觉得这里的写法是非常巧妙的,取了 grid xy 和 inverse(类似于 flip)。

(gxy % 1. g) ,这里的 g 是 0.5,如果仅考虑这个条件, 好像可以 直接判断是否选取左边 cell 和上边 cell。

但是要考虑到边界情况,如果当前已经处于最上方,已经没有上边 cell 可以选择了,这就是 (gxy 1.) 起到的作用,判断 edge case。

如果本来大于 0.5,那么 inverse 后就小于 0.5 了,所以可以使用相同的逻辑选择右边 cell 和下边 cell ,类似地推理到 edge case。

最后一点要提的是使用 clamp_ 确保返回的 grid indices 不是非法值,旧版本 code 没用这个检查,不过好像也没什么差。

lcls, lbox, lobj 这三个用来存放loss,默认使用pytorch提供的BCE loss。

pxy = ps[:, :2].sigmoid() * 2. - 0.5 在learn的时候不需要加cx cy。

bbox回归的公式可以参考model/yolo.py line56, 57。

Objectness 这里 gr 设置为 1.0,也就意味着直接拿 iou 作为 confidence。

至于为什么返回 loss 的时候为什么要乘 bs,还不是很清楚,第二个返回值就是为了打印信息用的。

在train的时候,target是在feature map的scale。

在inference的时候,直接乘img map scale的anchor size就可以了,也就是配置文件里的anchor。

交叉熵损失函数是什么?

平滑函数。

交叉熵损失函数,也称为对数损失或者logistic损失。当模型产生了预测值之后,将对类别的预测概率与真实值(由0或1组成)进行不比较,计算所产生的损失,然后基于此损失设置对数形式的惩罚项。

在神经网络中,所使用的Softmax函数是连续可导函数,这使得可以计算出损失函数相对于神经网络中每个权重的导数(在《机器学习数学基础》中有对此的完整推导过程和案例,这样就可以相应地调整模型的权重以最小化损失函数。

扩展资料:

注意事项:

当预测类别为二分类时,交叉熵损失函数的计算公式如下图,其中y是真实类别(值为0或1),p是预测类别的概率(值为0~1之间的小数)。

计算二分类的交叉熵损失函数的python代码如下图,其中esp是一个极小值,第五行代码clip的目的是保证预测概率的值在0~1之间,输出的损失值数组求和后,就是损失函数最后的返回值。

参考资料来源:百度百科-交叉熵

参考资料来源:百度百科-损失函数


文章标题:包含损失函数曲线python代码的词条
标题URL:http://scyanting.com/article/dssihhe.html