【知识学习/复习】损失函数篇,包含理解应用与分类:回归、分类、排序、生成等任务

损失函数总结

  • 一、损失函数理解
  • 二、不同任务的损失函数的应用
      • 1.图像分类
      • 2.目标检测
      • 3.语义分割
      • 4.自然语言处理(NLP)
      • 5.图神经网络(GNN)
      • 6.生成式网络
  • 三、损失函数
    • 1. 回归任务损失函数
      • 常见损失函数
      • IoU系列损失函数
        • 1. IoU损失函数(基础版)
        • 2. GIoU损失函数(Generalized IoU)
        • 3. DIoU损失函数(Distance IoU)
        • 4. CIoU损失函数(Complete IoU)
        • 其他iou:
        • 总结:
    • 2. 分类任务损失函数
    • 3. 排序任务损失函数
    • 4. 生成任务损失函数

一、损失函数理解

损失函数(Loss Function),在机器学习和统计学中,是一个衡量模型预测值实际值之间差异的函数。

  1. 损失函数的目的是量化模型的预测误差,以便在训练过程中通过优化算法(如梯度下降)来最小化这个误差,从而提高模型的预测准确性。

  2. 损失函数的选择取决于问题的性质模型的类型。比如:
    1.均方误差(Mean Squared Error, MSE):常用于回归问题,计算预测值与实际值差的平方的平均值。
    2.交叉熵损失(Cross-Entropy Loss):常用于分类问题,衡量模型预测的概率分布与真实分布之间的差异。
    3.对数损失(Log Loss):是交叉熵损失的一种特殊情况,常用于二分类问题。

  3. 通俗理解:想象一下,你是一名射箭运动员,你的目标是射中靶心。每次射箭后,箭落在靶子上的位置与靶心之间的距离,可以看作是你的“损失”。你的任务是通过不断练习,调整你的射箭技巧,使得这个距离尽可能小。
    ▲在这个比喻中:
    靶心:代表实际值,也就是你想要达到的目标。
    你的箭:代表模型的预测值。
    箭与靶心的距离:代表损失函数的输出,即预测值与实际值之间的差异。
    损失函数的作用就是计算这个“距离”,告诉你离目标还有多远。在机器学习中,我们通过不断调整模型(就像运动员调整射箭技巧),来减小这个“距离”,也就是最小化损失函数的值,从而使模型的预测更加准确。
    选择不同的损失函数,就像是选择不同的衡量距离的方法。
    在这里插入图片描述

二、不同任务的损失函数的应用

在机器学习和深度学习的多个领域中,损失函数的选择对于模型性能至关重要。以下是不同任务中常用的损失函数:

1.图像分类

  • 交叉熵损失(Cross-Entropy Loss):用于多分类问题,衡量模型输出的概率分布与真实标签的概率分布之间的差异。
  • sigmoid 交叉熵损失:适用于二分类任务和多标签分类问题,度量每个类独立且不互斥的概率误差。

2.目标检测

  • IoU损失(Intersection over Union Loss):基于预测边界框和真实边界框之间的IoU,衡量两个矩形框的重叠程度。
  • GIoU损失(Generalized IoU Loss):在IoU损失的基础上增加了惩罚项,解决非重叠情况下的梯度消失问题。
  • DIoU损失(Distance IoU Loss):考虑了预测框与真实框中心点的归一化距离,尺度不变。
  • CIoU损失(Complete IoU Loss):在DIoU损失的基础上增加了对纵横比的考虑,提供了更全面的几何因子。

3.语义分割

  • 交叉熵损失:用于像素级别的分类,计算每个像素点的分类概率与真实标签之间的差异。
  • Dice系数:衡量两个集合的相似度,通常用于计算分割图像的相似度。
  • Tversky损失:是Dice系数的扩展,通过调整参数控制假阳性和假阴性的相对重要性。

4.自然语言处理(NLP)

  • 交叉熵损失:用于文本分类、机器翻译等任务,衡量预测概率与真实标签之间的差异。
    语言模型(Language Modeling):语言模型的目标是预测给定上下文的下一个单词或字符。常见的损失函数包括交叉熵损失函数(Cross-Entropy Loss)和负对数似然损失函数(Negative Log-Likelihood Loss)。
  1. 文本分类(Text Classification):文本分类任务涉及将文本分为不同的预定义类别。常见的损失函数包括交叉熵损失函数和多项式逻辑回归损失函数(Multinomial Logistic Regression Loss)。

  2. 序列标注(Sequence Labeling):序列标注任务涉及对输入序列中的每个标记进行分类。例如,命名实体识别(Named Entity Recognition)和词性标注(Part-of-Speech Tagging)等任务。常见的损失函数包括交叉熵损失函数和条件随机场损失函数(Conditional Random Field Loss)。

  3. 机器翻译(Machine Translation):机器翻译任务涉及将源语言文本翻译成目标语言文本。常见的损失函数包括交叉熵损失函数和最大似然损失函数(Maximum Likelihood Loss)。

  4. 序列生成(Sequence Generation):序列生成任务涉及生成符合某种规则的序列,例如文本摘要(Text Summarization)和机器对话(Chatbot)等任务。常见的损失函数包括交叉熵损失函数、自定义的目标函数(例如,基于BLEU分数的损失函数)以及强化学习中的策略梯度损失函数(Policy Gradient Loss)。

5.图神经网络(GNN)

  • 基于重构损失的GNN:通过最小化节点重构的误差来进行图结构数据的表示学习。
  • 基于对比损失的GNN:使用对比学习的方法来学习图结构数据的表示。

6.生成式网络

  • 均方误差损失(Mean Squared Error, MSE):常用于生成对抗网络(GAN)中,衡量生成图像与真实图像之间的差异。

在实际应用中,损失函数的选择和设计对于模型能否有效学习以及其最终性能具有决定性作用。此外,损失函数的组合使用或者变种设计也常常根据具体任务的需求来进行调整。

三、损失函数

按任务类型分类,损失函数可以分为以下几类,并且我将为每个类别提供具体的例子:

1. 回归任务损失函数

回归任务的目标是预测一个连续值,常用损失函数包括:
任务: 预测一个连续值,如房价、温度等。

  • 均方误差(Mean Squared Error, MSE):
    MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2MSE是真实值与预测值的差值的平方然后求和平均。其中, y i y_i yi 是真实值, y ^ i \hat{y}_i y^i 是预测值。

常见损失函数

  • 均方根误差(Root Mean Squared Error, RMSE):
    RMSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} RMSE=n1i=1n(yiy^i)2 均方根误差是预测值与真实值偏差的平方观测次数n比值平方根。衡量的是预测值与真实值之间的偏差,并且对数据中的异常值较为敏感

  • 平均绝对误差(Mean Absolute Error, MAE):
    MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1i=1nyiy^i
    通俗解释:
    想象你是一名学生,每次考试后,老师会检查你答对的题目数量。在MAE的情况下,老师不会关心你答对的题目比别人多多少,只会简单地数一数你答错了多少题,然后计算全班平均每个学生答错的题目数量。在机器学习中,这就像是计算模型预测值与实际值之间差异的总和,然后取平均值。

  • Huber损失:
    L δ ( a ) = { 1 2 a 2 for  ∣ a ∣ ≤ δ , δ ∣ a ∣ − 1 2 δ 2 otherwise , L_{\delta}(a) = \begin{cases} \frac{1}{2}a^2 & \text{for } |a| \le \delta, \\ \delta |a| - \frac{1}{2}\delta^2 & \text{otherwise}, \end{cases} Lδ(a)={21a2δa21δ2for aδ,otherwise,
    其中 a = y i − y ^ i a = y_i - \hat{y}_i a=yiy^i δ \delta δ是一个阈值。
    Huber损失可以看作是MAE和MSE的结合。 它对小的误差(比如小于某个阈值δ)使用平方惩罚,而对大的误差使用线性惩罚。这就像是老师对学生的答错题目数量有一个容忍度,当学生答错的题目少于这个数量时,老师会严苛地惩罚;但一旦超过这个数量,老师会认为学生可能需要额外的帮助而不是惩罚,因此惩罚会变得轻一些。

IoU(交并比,Intersection over Union)及其衍生的损失函数是目标检测领域中用于评估预测边界框与真实边界框之间相似度的关键工具。以下是IoU及其发展至今的多种变体损失函数的介绍,以及它们通俗易懂的解释:

IoU系列损失函数

1. IoU损失函数(基础版)

通俗解释
IoU损失函数是最直观的衡量预测边界框与真实边界框相似度的方法。如果预测框和真实框完全不重叠,IoU为0,损失为1;如果完全重合,IoU为1,损失为0。这就像是用一个橡皮圈去套一个固定在地面上的小物体,橡皮圈和物体重叠的区域除以橡皮圈整个区域的大小,就是IoU。
在这里插入图片描述

数学公式
IoU = A∩B A∪B \text{IoU} = \frac{\text{A∩B}}{\text{A∪B}} IoU=A∪BA∩B
缺点:

  1. 非重叠时的梯度问题:当预测边界框和真实边界框没有重叠时,IoU值为0,此时IoU损失函数的梯度也为0,导致无法通过梯度下降法来优化模型。
  2. 尺度敏感性:IoU对边界框的尺度变化比较敏感,这可能导致在不同尺度的目标上性能不稳定。
  3. 无法精确反映重合度:IoU无法精确反映两个边界框的重合程度,特别是当两个框部分重叠或者角度差异较大时。下面三个iou相同,但可以看出重合度是不同的。
    在这里插入图片描述
2. GIoU损失函数(Generalized IoU)

通俗解释
GIoU损失函数在IoU的基础上增加了一个惩罚项,这个惩罚项是两个边界框的最小闭合框与它们实际面积的比值。当两个框不重叠时,IoU为0,但GIoU损失仍然可以提供梯度,帮助模型学习。
在这里插入图片描述

数学公式
GIoU = I o U − C − (A∩B) C \text{GIoU} = IoU-\frac{\text{C}-\text{(A∩B)}}{\text{C}} GIoU=IoUCC(A∩B)其中C是两个框的最小外接矩形的面积
解决的问题:

  1. 梯度消失问题: 当预测边界框和真实边界框没有重叠时,IoU为0,其梯度也为0,导致无法提供有意义的反馈给模型。GIoU通过引入最小闭合框(smallest enclosing box)的概念,即使在非重叠情况下也能提供梯度,从而解决了这个问题。
  2. 尺度敏感性: GIoU考虑了预测框和真实框的面积,使得损失函数对尺度更敏感,有助于模型学习到更准确的边界框尺寸。
3. DIoU损失函数(Distance IoU)

通俗解释
DIoU损失函数在GIoU的基础上,进一步考虑了预测框和真实框中心点之间的距离。这就像是不仅考虑橡皮圈和物体的重叠程度,还要考虑橡皮圈中心与物体中心的距离。

数学公式
L DIoU = 1 − IoU − Center Distance Term L_{\text{DIoU}} = 1 - \text{IoU} - \text{Center Distance Term} LDIoU=1IoUCenter Distance Term
Center Distance Term = ρ 2 c 2 \text{Center Distance Term} = \frac{\rho^2}{c^2} Center Distance Term=c2ρ2

其中, ρ \rho ρ 是预测框与真实框中心点的距离, c c c 是最小闭合框的对角线长度。

4. CIoU损失函数(Complete IoU)

通俗解释
CIoU损失函数是DIoU的扩展,它不仅考虑重叠区域和中心点距离,还考虑了两个框的宽高比。这就像是在橡皮圈游戏中增加了一个规则,如果橡皮圈和物体的形状接近,也会得到额外的分数。

数学公式
L CIoU = 1 − IoU − Center Distance Term − Aspect Ratio Term L_{\text{CIoU}} = 1 - \text{IoU} - \text{Center Distance Term} - \text{Aspect Ratio Term} LCIoU=1IoUCenter Distance TermAspect Ratio Term
Aspect Ratio Term = β ( v ) ( 4 π 2 arctan ⁡ w p h p − 1 4 ) \text{Aspect Ratio Term} = \beta(v) \left( \frac{4}{\pi^2} \arctan \frac{w_p}{h_p} - \frac{1}{4} \right) Aspect Ratio Term=β(v)(π24arctanhpwp41)

其中, β ( v ) \beta(v) β(v) 是一个根据重叠区域面积调整权重的函数, v v v 是预测框与真实框重叠区域的面积, w p w_p wp h p h_p hp 分别是预测框和真实框的宽度和高度。

其他iou:
  1. SIoU (Smooth IoU): SIoU损失函数通过融入角度考虑和规模敏感性,引入了一种更为复杂的边界框回归方法。它包含角度损失、距离损失、形状损失等组成部分,旨在实现更好的训练速度和预测准确性。

  2. EIoU (Enhanced IoU): EIoU损失函数的核心在于提高边界框回归的准确性和效率。它通过增加中心点距离损失、考虑尺寸差异以及结合最小封闭框尺寸来优化目标检测。

  3. WIoU (Wise IoU): WIoU损失函数引入了动态聚焦机制,旨在改善边界框回归损失,适用于需要动态调整损失焦点的情况,如不均匀分布的目标或不同尺度的目标检测。

  4. XIoU、NWD、RepulsionLoss: 这些损失函数是YOLOv8提出的70多种IoU损失函数的改进之一,用于进一步优化目标检测性能。

总结:

从IoU到CIoU的发展,反映了目标检测领域对于边界框预测精度要求的提高。每种损失函数都试图以不同的方式解决边界框预测中的特定问题,如非重叠情况下的梯度消失、尺度不变性、以及形状相似性等。通过这些损失函数的应用,目标检测模型能够更准确地定位图像中的对象。

2. 分类任务损失函数

分类任务的目标是预测离散类别的标签,常用损失函数包括:
任务: 预测一个离散类别,如垃圾邮件检测、手写数字识别等。

  • 二元交叉熵损失(Binary Cross-Entropy Loss): 用于二分类问题。
    L = − ( y i ⋅ log ⁡ ( y ^ i ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − y ^ i ) ) L = -\left( y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1 - \hat{y}_i) \right) L=(yilog(y^i)+(1yi)log(1y^i))假设我们有一个二分类问题,比如判断邮件是否为垃圾邮件。这个损失函数衡量的是模型认为邮件是垃圾邮件的概率与实际标签(是或否)之间的差异。

  • 多类交叉熵损失(Categorical Cross-Entropy Loss): 用于多分类问题。
    L = − ∑ c = 1 M y i c ⋅ log ⁡ ( y ^ i c ) L = -\sum_{c=1}^{M} y_{ic} \cdot \log(\hat{y}_{ic}) L=c=1Myiclog(y^ic)对于有多于两个类别的问题,比如手写数字识别(0到9的数字)。这个损失函数衡量的是模型对每个类别预测概率的分布与真实标签的分布之间的差异。其中, M M M是类别的数量, y i c y_{ic} yic是一个指示器,当类别 c c c是正确的类别时为1,否则为0。

  • Hinge损失(Hinge Loss): 支持向量机(SVM)中使用。
    L = max ⁡ ( 0 , 1 − ( y i ⋅ y ^ i ) ) L = \max(0, 1 - (y_i \cdot \hat{y}_i)) L=max(0,1(yiy^i))
    例子: 假设你正在尝试区分猫和狗的图片。如果一张图片是猫,那么它的正确标签是-1。如果模型预测图片是猫(即输出了一个负值),并且很准确,那么 y i ⋅ y ^ i y_i \cdot \hat{y}_i yiy^i会是一个较大的负数,乘积为正值,Hinge损失就会是0,因为模型已经很好地分类了这个样本。反之,如果模型预测是一个正值(认为图片是狗),那么损失就会是一个正数,意味着模型犯了一个错误,需要调整。

  • Focal损失(Focal Loss):
    Focal损失是为了解决类别不平衡问题而提出的。在一些情况下,某些类别的样本数量可能远多于其他类别,导致模型对多数类过拟合,而对少数类则难以学习。Focal损失通过减少对“简单”样本(即模型已经很好分类的样本)的关注,而增加对“困难”样本(模型分类不够准确的样本)的关注来解决这个问题。这就像是老师在课堂上决定花更多的时间帮助那些学习有困难的学生,而不是已经表现很好的学生。
    L = − α t ( 1 − y ^ i ) γ ⋅ log ⁡ ( y ^ i ) L = -\alpha_t (1 - \hat{y}_i)^{\gamma} \cdot \log(\hat{y}_i) L=αt(1y^i)γlog(y^i)
    其中, α t \alpha_t αt 是平衡因子, γ \gamma γ是调节因子。
    例子: 继续上面猫狗图片分类的例子,假设“猫”类别的图片非常多,而“狗”类别的图片非常少。如果模型大多数时间都在学习区分不同种类的“猫”,而对“狗”的图片关注不足。使用Focal损失后,模型会对那些分类错误的“狗”图片给予更多的权重,从而鼓励模型更关注少数类,改善分类性能。

3. 排序任务损失函数

排序任务通常涉及到对一组项进行排序,常用损失函数包括:
任务: 预测项目之间的相对顺序,如搜索引擎结果排序。

  • Pairwise排序损失: 如三元组损失(Triplet Loss)。
    用于训练一个系统,比如面部识别,要求系统能够识别出人脸之间的相似性或差异性。三元组损失会取一个锚点样本,一个相似样本和一个不同样本,然后确保锚点与相似样本之间的距离小于锚点与不同样本之间的距离。
    L = ∑ i = 1 n max ⁡ ( 0 , d ( a i , p i ) − d ( a i , n i ) + m a r g i n ) L = \sum_{i=1}^{n} \max(0, d(a_i, p_i) - d(a_i, n_i) + margin) L=i=1nmax(0,d(ai,pi)d(ai,ni)+margin)
    其中 a i a_i ai是锚点, p i p_i pi 是正样本, n i n_i ni 是负样本, d d d是样本之间的距离, m a r g i n margin margin是边界。

  • Listwise排序损失: 如直接优化排序任务的NDCG(Normalized Discounted Cumulative Gain)。

4. 生成任务损失函数

生成任务如生成对抗网络(GANs)中使用特殊的损失函数:
任务: 创建新的数据实例,如生成图片、音乐等。

  • 最小二乘GAN(Least Squares GAN):
    L D = 1 n ∑ i = 1 n ( D ( x i ) − r ) 2 L_D = \frac{1}{n} \sum_{i=1}^{n} (D(x_i) - r)^2 LD=n1i=1n(D(xi)r)2
    L G = 1 n ∑ i = 1 n ( D ( G ( z i ) ) − ( 1 − r ) ) 2 L_G = \frac{1}{n} \sum_{i=1}^{n} (D(G(z_i)) - (1 - r))^2 LG=n1i=1n(D(G(zi))(1r))2
    其中 D D D是判别器, G G G是生成器, r r r是介于0和1之间的常数。

  • Wasserstein损失: 提高GAN训练的稳定性。
    用于生成对抗网络(GANs),比如生成看起来像梵高画风的图片。这个损失函数能够更稳定地训练GAN,通过最大化真实图片与生成图片之间的Wasserstein距离。
    L D = ∑ i = 1 n D ( x i ) − E q ( z ) [ D ( G ( z ) ) ] L_D = \sum_{i=1}^{n} D(x_i) - \mathbb{E}_{q(z)} [D(G(z))] LD=i=1nD(xi)Eq(z)[D(G(z))]
    L G = − E q ( z ) [ D ( G ( z ) ) ] L_G = -\mathbb{E}_{q(z)} [D(G(z))] LG=Eq(z)[D(G(z))]
    其中 q ( z ) q(z) q(z)是先验噪声分布。

这些损失函数的选择和设计对于模型能否有效学习和其最终性能至关重要。在设计损失函数时,研究人员会考虑任务特性、模型架构以及训练目标。

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

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

相关文章

TiDB 利用binlog 恢复-反解析binlog

我们知道TiDB的binlog记录了所有已经执行成功的dml语句,类似mysql binlog row模式 ,TiDB官方也提供了reparo可以进行解析binlog,如下所示: [2024/04/26 20:58:02.136 08:00] [INFO] [config.go:153] ["Parsed start TSO"] [ts449…

聊天窗口关键词回复、定时发送、获取手机号发送到服务器

代码逻辑介绍: isUserTyping记录用户是否输入消息,用setInterval定时50秒检测并改变用户状态为false,发送消息、或者自动打印一轮完毕后,置为true。 sendMessage是处理发送消息的函数; appendMessage是将消息追加到…

[C++][数据结构]二叉搜索树:介绍和实现

二叉搜索树 概念 二叉搜索树又称二叉排序树,它是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也…

IoT Scenario: Smart Retail System-Multiple Sources and Multiple Terminals

物联网/大数据可视化领域发文可以联系:nascimsina.com IoT Scenario: Smart Retail System Overview The use of IoT in the retail industry enhances customer experiences, optimizes inventory management, and provides valuable insights into consumer beh…

Vue+ElementUI实现文件照片音频视频预览

1. 需求是点击预览按钮 根据文件名的后缀去实现预览 2. 具体实现代码及逻辑 1.预览弹框 <el-dialog:visible.sync"visibleFile"width"40%":close-on-click-modal"false"close"cancelHandler":append-to-body"true">…

【架构】后端项目如何分层及分层领域模型简化

文章目录 一. 如何分层1. 阿里规范2. 具体案例分析 二. 分层领域模型的转换1. 阿里规范2. 模型种类简化分析 三. 小结 本文描述后端项目中如何进行分层&#xff0c;以及分层领域模型简化 一. 如何分层 1. 阿里规范 阿里的编码规范中约束分层逻辑如下: 开放接口层&#xff1a…

pinia持久化

安装 pinia-plugin-persistedstate npm i pinia-plugin-persistedstate main.ts import App from ./App.vue import { createPersistedState } from pinia-plugin-persistedstate import { createPinia } from piniaconst pinia createPinia() pinia.use(createPersistedSt…

Java全栈开发前端+后端(全栈工程师进阶之路)-环境搭建

在课程开始前我们要配置好我们的开发环境&#xff0c;这里我的电脑太乱了&#xff0c;我使用vm虚拟机进行搭建开发环境&#xff0c;如果有需要环境的或者安装包&#xff0c;可以私信我。 那我们开始 首先我们安装数据库 这里我们使用小皮面板 小皮面板(phpstudy) - 让天下没…

【计算机毕业设计】基于SSM++jsp的社区管理与服务系统【源码+lw+部署文档+讲解】

目录 摘 要 Abstract 第一章 绪论 第二章 系统关键技术 第三章 系统分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3运行可行性 3.1.4法律可行性 3.4.1注册流程 3.4.2登录流程 3.4.3活动报名流程 第四章 系统设计 4.3.1登录模块顺序图 4.3.2添加信息模块顺序图 4.4.1 数据库E-…

【Node.js工程师养成计划】之express框架

一、Express 官网&#xff1a;http://www.expressjs.com.cn express 是一个基于内置核心 http 模块的&#xff0c;一个第三方的包&#xff0c;专注于 web 服务器的构建。 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&…

使用LocalGPT+cpolar打造可远程访问的本地私有类chatgpt服务

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

iOS 实现视图遮罩效果

有时候&#xff0c;我们会遇到这种需求&#xff0c;只讲视图的某个部分展示出来 这时候&#xff0c;我们可以通过设置该视图layer.mask layerb来实现&#xff0c;需要注意的是&#xff0c;这里的layerb必须要设置backgroundColor&#xff0c;渐变layer有colors,否则达不到效果…

Java学习3:程序流程控制

Java程序流程控制 1.执行顺序 顺序结构分支顺序 if,switch 循环结构 for ,while ,do-while 2.if分支 三种形式 if(条件表达式){} else if(){} else{}3.switch分支 string week "周一"; switch(week){case "周一":stem.out.println("周一&qu…

UG NX二次开发(C++)-获取模型中所有的拉伸(Extrude)特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG 12中创建几个拉伸特征3、UFun中获取对象类型4、通过NXOpen过渡5.测试结果1、前言 在采用UG NX二次开发时,有时需要在模型中获取特定的对象,比如拉伸特征、关联特征等等。但是通过…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API&#xff0c;用于监测一个或多个目标元素与其祖先元素或视窗&#xff08;viewport&#xff09;之间的交叉状态&#xff08;intersection&#xff09;的变化。它可以有效地监听元素是否进入或离开可视区域&#xff0c;从而实现…

【氮化镓】AlGaN/GaN HEMTs沟道温度测量

文章是关于AlGaN/GaN HEMTs&#xff08;高电子迁移率晶体管&#xff09;在不同基底&#xff08;如蓝宝石和硅&#xff09;上生长时&#xff0c;通过直流&#xff08;DC&#xff09;特性方法确定沟道温度的研究。文章由J. Kuzmk, P. Javorka, A. Alam, M. Marso, M. Heuken, 和 …

UWB人员实时定位系统,Spring boot +Vue框架开发的UWB源码

UWB定位技术最核心的优势就是定位精度&#xff0c;可达厘米级&#xff0c;是其它定位技术的成百上千倍&#xff0c;在此精度下&#xff0c;可以满足绝大多数行业精细化管理的需求。 有了精准的位置数据&#xff0c;就可以把人员和物资的轨迹进行数据化还原&#xff0c;通过人工…

改造BeanUtils,优雅实现List数据拷贝

BeanUtils.copyProperties();确实为我们做了很多事情&#xff0c;虽然不能完美完成深拷贝&#xff0c;但是对于 po、vo、dto 的拷贝已经足够用了。可还是有一些不够完美的地方。 不足几点如下&#xff1a; ①. 不能拷贝 list&#xff0c;而拷贝 list 的情况又大量存在&#x…

C++中读取文件模拟视频流并使用回调函数处理数据

C中读取文件模拟视频流并使用回调函数处理数据 flyfish 在 C 中&#xff0c;回调函数通常以函数指针、函数对象&#xff08;包括 std::function&#xff09;、成员函数指针或 Lambda 表达式的形式来实现。这里使用了 std::function<void(const std::vector<char>&am…

爬虫自动调用shell通过脚本运行scrapy爬虫(crawler API)

一、爬虫时如何同时调用shell 1)终端cd项目>>scrapy crawl example 2)打开example.py import scrapy from scrapy.shell import inspect_response#引入shellclass ExampleSpider(scrapy.Spider):name "example"allowed_domains ["example.com"]…