当前位置: 首页 > news >正文

做网站需要那些软件免费个人网站模板

做网站需要那些软件,免费个人网站模板,wordpress主题实例制作,搜索引擎营销与seo优化1. Ohem Cross Entropy Loss 的定义 OhemCrossEntropyLoss 是一种用于深度学习中目标检测任务的损失函数,它是针对不平衡数据分布和困难样本训练的一种改进版本的交叉熵损失函数。Ohem 表示 “Online Hard Example Mining”,意为在线困难样本挖掘。在目…

1. Ohem Cross Entropy Loss 的定义

OhemCrossEntropyLoss 是一种用于深度学习中目标检测任务的损失函数,它是针对不平衡数据分布和困难样本训练的一种改进版本的交叉熵损失函数。Ohem 表示 “Online Hard Example Mining”,意为在线困难样本挖掘。在目标检测任务中,由于背景类样本通常远远多于目标类样本,导致了数据分布的不平衡问题,而且一些困难的样本对于网络的训练很有挑战性。OhemCrossEntropyLoss 就是为了解决这些问题而设计的。

这个损失函数的核心思想是在训练过程中只选择那些具有较高损失值的困难样本进行梯度更新,从而更加关注于难以分类的样本,有助于网络更好地适应这些样本,提高模型的性能。

数学上,OhemCrossEntropyLoss 的定义可以用以下公式表示:

OhemCrossEntropyLoss = − 1 N ∑ i = 1 N { log ( p target ) if  y target = 1 (目标类样本) log ( 1 − p target ) if  y target = 0 (背景类样本且损失高于阈值) 0 otherwise \text{OhemCrossEntropyLoss} = - \frac{1}{N} \sum_{i=1}^{N} \begin{cases} \text{log}(p_{\text{target}}) & \text{if } y_{\text{target}} = 1 \text{ (目标类样本)} \\ \text{log}(1 - p_{\text{target}}) & \text{if } y_{\text{target}} = 0 \text{ (背景类样本且损失高于阈值)} \\ 0 & \text{otherwise} \end{cases} OhemCrossEntropyLoss=N1i=1N log(ptarget)log(1ptarget)0if ytarget=1 (目标类样本)if ytarget=0 (背景类样本且损失高于阈值)otherwise

其中, N N N 是 Batch 中样本的数量, p target p_{\text{target}} ptarget 是模型预测目标类的概率, y target y_{\text{target}} ytarget 是真实标签(1 表示目标类,0 表示背景类),损失计算根据标签的情况进行不同的处理。背景类样本中损失值高于一个预定义的阈值的样本会被选中进行梯度更新,这样网络更关注于难以分类的样本,有助于提高性能。

需要注意的是,OhemCrossEntropyLoss 需要在训练过程中动态地筛选困难样本,所以相比于传统的交叉熵损失,它的计算相对复杂。但在处理不平衡数据和困难样本时,它能够提升模型的鲁棒性和泛化能力。

2. OHEM 步骤流程

  1. 给 OhemCE Loss 取一个阈值 thresh

    • 那么该像素点的预测概率 > 0.7,则该像素点可以看成是简单样本,不参与损失计算
    • 那么该像素点的预测概率 < 0.7,则该像素点可以看成是困难样本,参与损失计算
  2. 确定忽略的像素点值 lb_ignore:一般我们将背景的值设置为 255,即如果像素点值的大小是 255,那么就不参与损失计算。

  3. 设置最少计算的像素点个数 n_min:至少有 n_num 个像素点参与损失计算(不然网络有可能停止更新了)。

简单来说:OHEM CrossEntropy Loss 的目的是:挖掘困难样本;忽略简单样本

3. 代码实现

import random
import numpy as np
import torch
from torch.autograd import Variable
import torch.nn as nndef setup_seed(seed):torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)np.random.seed(seed)random.seed(seed)class OhemCELoss(nn.Module):def __init__(self, thresh, lb_ignore=255, ignore_simple_sample_factor=16):"""Args:thresh: 阈值,超过该值则被算法简单样本 -> 不参与Loss计算lb_ignore: 忽略的像素值(一般255代表背景), 不参与损失的计算ignore_simple_sample_factor: 忽略简单样本的系数该系数越大,最少计算的像素点个数越少该系数越小,最少计算的像素点个数越多"""super(OhemCELoss, self).__init__()"""这里的 thresh 和 self.thresh 不是一回儿事儿①预测概率 > thresh -> 简单样本①预测概率 < thresh -> 困难样本②损失值 > self.thresh -> 困难样本②损失值 < self.thresh -> 简单①和②其实是一回儿事儿,但 thresh 和 self.thresh 不是一回儿事儿"""self.thresh = -torch.log(input=torch.tensor(thresh, requires_grad=False, dtype=torch.float))self.lb_ignore = lb_ignoreself.criteria = nn.CrossEntropyLoss(ignore_index=lb_ignore, reduction='none')self.ignore_simple_sample_factor = ignore_simple_sample_factor"""reduction 参数用于控制损失的计算方式和输出形式。它有三种可选的取值:1. 'none':当设置为 'none' 时,损失将会逐个样本计算,返回一个与输入张量相同形状的损失张量。这意味着输出的损失张量的形状与输入的标签张量相同,每个位置对应一个样本的损失值。2. 'mean':当设置为 'mean' 时,损失会对逐个样本计算的损失进行求均值,得到一个标量值。即计算所有样本的损失值的平均值。3. 'sum' : 当设置为 'sum'  时,损失会对逐个样本计算的损失进行求和,得到一个标量值。即计算所有样本的损失值的总和。在语义分割任务中,通常使用 ignore_index 参数来忽略某些特定标签,例如背景类别。当计算损失时,将会忽略这些特定标签的损失计算,以避免这些标签对损失的影响。如果设置了 ignore_index 参数,'none' 的 reduction 参数会很有用,因为它可以让你获取每个样本的损失,包括被忽略的样本。总之,reduction 参数允许在计算损失时控制输出形式,以满足不同的需求。"""def forward(self, logits, labels):# 1. 计算 n_min(至少算多少个像素点)n_min = labels[labels != self.lb_ignore].numel() // self.ignore_simple_sample_factor# 2. 使用 CrossEntropy 计算损失, 之后再将其展平loss = self.criteria(logits, labels).view(-1)# 3. 选出所有loss中大于self.thresh的像素点 -> 困难样本loss_hard = loss[loss > self.thresh]# 4. 如果总数小于 n_min, 那么肯定要保证有 n_min 个像素点的 lossif loss_hard.numel() < n_min:loss_hard, _ = loss.topk(n_min)# 5. 如果参与的像素点的个数 > n_min 个,那么这些点都参与计算loss_hard_mean = torch.mean(loss_hard)# 6. 返回损失的均值return loss_hard_meanif __name__ == "__main__":setup_seed(20)# 1. 生成预测值(假设我们有两个样本,每个样本有 3 个类别,高度和宽度均为 4)logits = Variable(torch.randn(2, 3, 4, 4))  # [N, C, H, W], s.t. C <-> num_classes# 2. 生成真实标签(每个样本的标签是一个 4x4 的图像)labels = Variable(torch.randint(low=0, high=3, size=(2, 4, 4)))  # [N, H, W]# 3. 初始化:创建 OhemCELoss 的实例,阈值设置为 0.7ohem_criterion = OhemCELoss(thresh=0.7, lb_ignore=255, ignore_simple_sample_factor=16)# 4. 计算 Ohem 损失loss = ohem_criterion(logits, labels)print(f"Ohem Loss: {loss.item()}")  # Ohem Loss: 1.3310734033584595

知识来源

  1. https://www.bilibili.com/video/BV12841117yo
  2. https://www.bilibili.com/video/BV1Um4y1L753
http://www.tj-hxxt.cn/news/77179.html

相关文章:

  • 定制网站要多少钱免费推广的渠道有哪些
  • 招聘网站建设方案模板网站建设公司哪个好呀
  • 四川省城乡和住房建设厅网站网络营销策略概念
  • 黄岩路桥网站设计下载班级优化大师
  • 建立网站ppt免费的网站域名查询565wcc
  • 如何做网站免费教程销售推广
  • 在美国做网站如何接入收款工具百度快照客服
  • 单位网站制作费用报价单百度一下首页网页百度
  • 个人网站备案多少钱小学生班级优化大师
  • html做网站实战教程百度搜索关键词热度
  • 环保网站 怎么做中国疫情今天最新消息
  • b2b分为哪四种模式seo综合查询国产
  • 网站建设seo优化推广昆山seo网站优化软件
  • 南京专业网站制作网站如何优化排名
  • 开发app需要的技术广州谷歌seo公司
  • 番禺大石做网站推广seo是什么意思
  • 网站建设合同服务内容西安网站制作公司
  • 网站建设咨询话术技巧中国免费域名注册平台
  • 企业网站管理系统演示平台网络推广和网站推广平台
  • java做网站用什么做seo专业术语
  • wordpress英文意思广州市口碑seo推广
  • 非洲做网站用哪里服务器好互联网营销渠道有哪些
  • php网站开发实例教程 pdf同城推广引流平台
  • 长宁区企业网站建设河北疫情最新情况
  • 衡阳网站建设 千度网络万网域名注册信息查询
  • 盱眙有做公司网站的吗百度竞价推广效果好吗
  • 武汉营销型网站建设seo搜索引擎优化薪资水平
  • 提供网站建设工具的品牌如何建立网站平台的步骤
  • 信誉好的营销网站建设seo优化裤子关键词
  • 兰州东方商易文化传播有限责任公司百度seo关键词排名查询