Evidential Deep Learning to Quantify Classification Uncertainty

news2024/12/23 10:22:24

本片文章发表于NeurIPS 2018。

文章链接:https://arxiv.org/abs/1806.01768


一、概述

近年来,神经网络在不同领域取得了革命性的进步,尤其是在dropout、normalization以及skip connection等方法被提出之后,撼动了整个机器学习领域。在拥有足够的labelled data的条件下,训练一个拥有卓越性能的神经网络模型已经不再是一件稀奇的事情了,我们或许应该将目光转移到模型的鲁棒性样本效率安全性可解释性等其他方面上。

比如,假设我们在MNIST数据集上训练得到了一个几乎有100%准确率的神经网络,当我们输入一张 “猫”的图片的时候,它是否能够给出正确的预测结果呢?对于经典的神经网络,即,参数确定的神经网络(deterministic neural networks),答案很显然是不能。因为我们的模型在训练时从未考虑过“猫”这个类别,在决策层也没有一个可以表示“猫”的输出单元。这是当前神经网络普遍存在的一个问题,即无法处理分布外(out of distribution, OOD)的数据。

然而这并不是最糟的,因为我们会发现即使我们输入了一张“猫”的图片,神经网络仍然会输出“0-9”之间的一个类别,比如,把“猫”预测为数字“0”。这种现象的发生是因为deterministic neural networks并不具备描述“I don't know”的能力,即使这个能力看起来十分基本而简单。基于此,贝叶斯神经网络将网络参数视为随机变量(服从一个特定分布)而不是一个确定的值,通过近似后验分布的矩(比如均值、方差)来估计预测的uncertainty。一旦有了uncertainty,就可以据此对预测结果进行评判,提醒用户谨慎对待那些uncertainty较大的样本。

本文从theory of evidence的角度切入,同样将关注点聚焦于分类问题的uncertainty estimation问题上。作者将分类网络的标准输出softmax视为categorical distribution的参数集,并用Dirichlet density的参数来替换这个参数集——网络输出的类别预测结果是从Dirichlet density中采样得到的(有思想与贝叶斯网络很类似)。通过这种方式,模型的预测结果将服从一个分布,而不是一个点估计(作者在原文中将这个Dirichlet density视为“生产”这些点估计的“工厂”)。

实验证明,本文提出的方法在不确定性估计方面领先于最先进的贝叶斯神经网络模型。

二、方法

1. Deficiencies of Modeling Class Probabilities with Softmax

在输出层使用softmax函数将连续的activations映射为class probabilities几乎是所有深度神经网络的“金标准”。最终得到的模型可以被视为一个多项分布(给定输入,得到一个对应的多项分布),而这个分布的参数,也就是离散的类别概率,是由神经网络的输出所决定的。

对于一个 K-class 的分类问题,the likelihood function for an observed tuple (\mathbf{x, y}) is

Pr(y|\mathbf{x},\theta)=\mathrm{Mult}(y|\sigma(f_1(\mathbf{x},\theta)),...\sigma(f_K(\mathbf{x},\theta)))

其中 \mathrm{Mult} 是一个multinomial mass function;f_j(\mathbf{x},\theta) 是模型 f(\cdot ) 的第 j 个输出,模型的参数为 \theta\sigma(u_j)=e^{u_j}/\sum _{i=1}^Ke^{u_K} 是softmax function。

softmax负责将神经网络得到的关于类别预测的activations压缩到一个simplex内,使其满足概率的定义(非负、和为一)。通过优化参数 \theta 来最大化multinomial likelihood,等价于最小化对数似然-\mathrm{log}p(y|\mathbf{x},\theta)=-\mathrm{log}\sigma(f_y(\mathbf{x},\theta)),也被称为交叉熵损失(cross-entropy loss)。

Cross-entropy loss的概率解释是极大似然估计MLE,但作为频率派的一种方法,MLE无法推断预测分布的方差。此外, softmax 函数将神经网络输出进行指数运算而导致预测类别的概率被放大——这导致了一个问题,就是预测类别之间除了可以比较概率值的大小之外,它们之间的距离对不确定性估计没有任何价值。

上图是利用softmax做预测的例子,场景是手写数字“1”的旋转对应网络输出类别的变化。可以发现随着旋转角度的变化,左侧网络的预测类别会由“1”→“2”→“5”→“1”,并且即使预测错误其置信度也很高;右侧则输出了uncertainty,表示对预测结果的不确定。


2. Uncertainty and the Theory of Evidence

“The Dempster-Shafer Theory of Evidence (DST) is a generalization of the Bayesian theory to subjective probabilities.” ——D-S证据理论是贝叶斯理论的一种推广,使其更加适用于处理主观概率和不确定性的情况。关于D-S证据理论,本文只给出一些基本概念和重要公式(毕竟我也只懂个皮毛而已),更多的细节请查阅文献[1]。

D-S证据理论有以下几个特点:1. 不必满足概率可加性;2. 具有表达“不确定”和“不知道”的能力,这些信息由mass函数所表示,并且在证据合成过程中保留了这些信息;3. 允许将置信度赋予给假设空间的子集(不局限于单个元素)这里提到的一些词可能大家会有些陌生,如mass函数、证据合成、假设空间,接下来我会解释一下D-S证据理论中涉及的一些基本概念和定义。

(1) 基本概念

设 \Theta 是一个“识别框架”(frame of discernment),或称为“假设空间”;

(i) 基本概率分配 (Basic Probability Assignment, BPA)

在识别框架 \Theta 上的BPA是一个 2^\Theta \rightarrow [0,1] 的函数m,称为mass函数。m接受来自于识别框架 \Theta 所构成的幂集的输入,并将其映射到闭区间 [0, 1] 内的实数,用以表示某种“置信度”或“信任度”。并且满足:

m(\varnothing )=0,\sum \limits_{A\subseteq \Theta}m(A)=1

其中,使 m(A)>0 的 A 称为焦元(focal elements)。

(ii) 信任函数 (belief function)

在识别框架 \Theta 基于BPA的信任函数定义为:

Bel(A)=\sum\limits_{B\subseteq A}m(B)

即,A的所有子集的mass值之和。

(iii) 似然函数 (plausibility function)

在识别框架 \Theta 基于BPA的似然函数定义为:

Pl(A)=\sum\limits_{B\cap A\neq \varnothing}m(B)

即,所有与A交集不为空的集合的mass值之和。

(iv) 信任区间

在证据理论中,对于识别框架 \Theta 中的某个假设A,基于BPA的信任函数 Bel(A) 似然函数Pl(A) 构成了信任区间 [Bel(A),Pl(A)],用以表示对某个假设的置信程度。

(2) Dempster合成规则

Dempster合成规则也称为证据合成公式,是Bayes公式的广义化。对于\forall A\subseteq\Theta\Theta 上的两个mass函数 m_1,m_2 的Dempster合成规则为:

(m_1\oplus m_2)(A)=\frac{1}{K} \sum\limits_{B\cap C=A}m_1(B)\cdot m_2(C)

其中,K 为归一化常数:

K=\sum\limits_{B\cap C \neq\varnothing}m_1(B)\cdot m_2(C)

对于有限个mass函数 m_1,m_2,...,m_n 的Dempster合成规则为:

(m_1\oplus...\oplus m_n)(A)=\frac{1}{K} \sum\limits_{A_1\cap ...\cap A_n=A}m_1(A_1)\cdot...\cdot m_n(A_n)

K=\sum\limits_{A_1\cap ...\cap A_n\neq \varnothing}m_1(A_1)\cdot m_2(A_2)\cdot ...\cdot m_n(A_n)

D-S证据理论将信任质量(belief mass)分配给识别框架的子集,比如样本可能的类别标签;也可以分配给整个框架本身,这时候表示真理可以是任何可能的状态,比如一个样本可能属于任何类别。而当将belief mass分配给整个识别框架的时候,就代表了“I don't know”。

主观逻辑 (Subjective Logic, SL)使用Dirichlet distribution形式化了DST辨识框架的信任分配,这使得SL能够利用证据理论的原理量化信任度和不确定性。具体来说,SL将辨识框架视为包含K个相互排斥的单元 (例如,类别标签),并为每个单元 k=1,...,K 提供了一个信任质量belief mass  b_k,并提供了一个整体的不确定性质量uncertainty mass u (就是分配给识别框架 \Theta 的belief mass),共 K+1 个值。这K + 1个值非负,并且和为一:

u+\sum \limits_{k=1}^Kb_k=1, where\ u\geq 0 \ and\ b_k \geq 0 \ for \ k=1,...,K

单元 k 的信任度 b_k 是根据该单元可用的证据evidence来计算的。设 e_k\geq 0 是第 k 个单元的evidence,那么belief mass与uncertainty mass通过以下式子计算:

b_k=\frac{e_k}{S} \ and \ u=\frac{K}{S}

其中 S=\sum\limits_{i=1}^K(e_i+1),即所有证据之和再加上K;而uncertainty与总的evidence成反比,当没有evidence的时候,每个单元的belief mass将为0,此时 S=K,总体的uncertainty为1。

所谓的“证据”就是我们从数据中收集到的将样本分类为某一类别的“支持度量” (measure of the amount of support collected from data in favor of a sample to be classified into a certain class——有时候觉得用原文更好理解一点...)。而信任质量分配 (belief mass assignment),也就是主观意见 (subjective opinion),对应于参数为 \alpha _k=e_k+1 的Dirichlet distribution——也就是说,利用公式 b_k=(\alpha_k-1)/S 可以很容易地通过Dirichlet distribution的参数中得到subjective opinion b_k 的值,其中 S=\sum\limits_{i=1}^K\alpha_i 被称为Dirichlet strength。

👆标准的神经网络的输出是对每个样本的可能类别进行“概率分配”,而基于evidence参数化的Dirichlet distribution表示的是这种“概率分配”的密度(density),也就是说,它是对二阶概率和不确定性进行建模的。

👆Dirichlet distribution是概率质量函数(pmf)的可能值 \textbf{p} 的概率密度函数(pdf),参数为\alpha\in \mathbb{R}^K。公式中,B(\boldsymbol{\alpha}) is the K-dimensional multinomial beta function,确保概率密度函数的积分为1。

接下来举两个具体的例子:

(例1) 假设对于一个10-分类问题,我们有信任质量分配 \mathbf{b}=\left \langle 0,...,0 \right \rangle,这个时候先验分布是一个均匀分布,i.e.,D(\mathbf{p}|\left \langle 1,...,1 \right \rangle)。因为没有observed evidence,因此belief mass全部为0,由b_k=(\alpha_k-1)/S 得到 \alpha_k 全部为1,此时 u=1

(例2) 现在假设 \mathbf{b}=\left \langle 0.8,...,0 \right \rangle(和可以不为1);此时 u=1-\sum \limits_{i=1}^Nb_k=0.2,由 u=\frac{K}{S} 可得 S=50,再通过 b_k=(\alpha_k-1)/S 得到 \alpha=\left \langle 41,1,...,1 \right \rangle,即Dirichlet distribution的参数。

当我们给出opinion \mathbf{b} 之后,进而求得 \alpha,则第 k 个单元的expected probability可以由Dirichlet distribution的均值给出:\hat{p_k}=\frac{\alpha_k}{S}

当一个样本的观测值与K个属性其中之一相关联时,相应的Dirichlet参数会被更新/增加,更新整个分布。例如,图像中被检测到的某些pattern可能有助于将其分类到某一个特定的类别中。此时,对应于这个类别的Dirichlet参数应该增加;也就是说,在分类问题中Dirichlet distribution的参数可以体现每一个类别具有的evidence。

本文的作者认为神经网络能够通过Dirichlet distribution提供对样本进行分类的opinion。假设\boldsymbol{\alpha_i}=\left \langle \alpha_{i1},...,\alpha_{iK} \right \rangle 是对于sample i 的Dirichlet distribution参数,那么 e_{i,j}=\alpha_{i,j}-1 就是网络估计的样本 i 属于第 j 类的evidence。


3. Learning to Form Opinions

网络的输出层使用ReLU激活函数代替softmax以保证产生非负值(证据是非负的),最后的输出结果将作为the evidence vector of predicted Dirichlet distribution.

具体来说,given a sample i,let f(\mathbf{x}_i|\Theta ) represent the predicted evidence vector,\Theta 是网络的参数,因此,最终的Dirichlet distribution的参数 \boldsymbol{\alpha}_i=\mathbf{e}_i+1=f(\mathbf{x}_i|\Theta)+1,这个分布的均值也就是\boldsymbol{\alpha}_i/S_i (recall S_i=\sum\limits_{j=1}^K(\mathbf{e}_{i,j}+1))可以表示为类别 i 的概率估计值。

Let \mathbf{y}_i be a one-hot vector encoding the ground-truth class of observation \mathbf{x}_i with y_{ij}=1 and y_{ik}=0 for all k\neq j, and \boldsymbol{\alpha}_i be the parameters of the Dirichlet density on the predictors. First, we can treat D(\mathbf{p}_i|\boldsymbol{\alpha}_i) as a prior on the likelihood \mathrm{Mult}(\mathbf{y}_i|\mathbf{p}_i) and obtain the negated logarithm of the marginal likelihood by integrating out the class probabilities.

(Note: marginal likelihood p(\mathbf{y}|\boldsymbol{\alpha})=\int p(\mathbf{y}|\mathbf{p})\cdot p(\mathbf{p}|\boldsymbol{\alpha})d\mathbf{p} )

损失函数1:

\mathcal{L}_i(\Theta)\\=-\textrm{log}(\int \prod \limits_{j=1}^Kp_{ij}^{y_{ij}}\frac{1}{B(\boldsymbol{\alpha}_i)}\prod \limits_{j=1}^Kp_{ij}^{\alpha_{ij}-1}d\mathbf{p}_i)\\ =\sum \limits_{j=1}^Ky_{ij}(\textrm{log}(S_i)-\textrm{log}(\alpha_{ij}))

优化 \boldsymbol{\alpha}_i 以最小化 \mathcal{L}_i(\Theta) ,这也被称为“Type II Maximum Likelihood”,对此我的理解就是最大边际似然。

我没有在网上搜到这个公式的完整推导过程,所以在这里写一下,不感兴趣的可以直接跳过以下部分:

\mathcal{L}_i(\Theta)\\=-\textrm{log}(\int \prod \limits_{j=1}^Kp_{ij}^{y_{ij}}\frac{1}{B(\boldsymbol{\alpha}_i)}\prod \limits_{j=1}^Kp_{ij}^{\alpha_{ij}-1}d\mathbf{p}_i)\\ =-\textrm{log}\left [\frac{1}{B(\boldsymbol{\alpha}_i)} \int \prod \limits_{j=1}^K p_{ij}^{\alpha_{ij}+y_{ij}-1}d\mathbf{p}_i)\right ]\\ \\ \\= -\textrm{log}\left [ \frac{1}{B(\boldsymbol{\alpha}_i)}\cdot B(\boldsymbol{\alpha}_i+\mathbf{y}_i )\right ]\\ \\ \\= \textrm{log}\frac{B(\boldsymbol{\alpha}_i)}{B(\boldsymbol{\alpha}_i+\mathbf{y}_i )}\\ \\ B(\boldsymbol{\alpha}_i)=\frac{\prod \limits_{j=1}^K\Gamma (\alpha_{ij})}{\Gamma (\sum \limits_{j=1}^K\alpha_{ij})}=\frac{\prod \limits_{j=1}^K\Gamma (\alpha_{ij})}{\Gamma (S_i)} \\ \\ B(\boldsymbol{\alpha}_i+\mathbf{y}_i)=\frac{\prod \limits_{j=1}^K\Gamma (\alpha_{ij}+y_{ij})}{\Gamma (\sum \limits_{j=1}^K\alpha_{ij}+y_{ij})}=\frac{\prod \limits_{j=1}^K\Gamma (\alpha_{ij}+y_{ij})}{\Gamma (S_i+1)}

二者相除:

\frac{B(\boldsymbol{\alpha}_i)}{B(\boldsymbol{\alpha}_i+\mathbf{y}_i)}=\frac{\Gamma (S_i+1)}{\Gamma S_i}\prod \limits_{j=1}^K\frac{\Gamma(\alpha_{ij})}{\Gamma(\alpha_{ij}+1)} =\prod \limits_{j=1}^K\frac{S_i}{\alpha_{ij}}=\prod \limits_{j=1}^K(\frac{S_i}{\alpha_{ij} })^{y_{ij}}

则有

\mathcal{L}_i(\Theta)=\textrm{log}\frac{B(\boldsymbol{\alpha}_i)}{B(\boldsymbol{\alpha}_i+\mathbf{y}_i )}=\sum \limits_{j=1}^Ky_{ij}(\textrm{log}(S_i)-\textrm{log}(\alpha_{ij}))

为了使 \mathcal{L}_i(\Theta) 最小,真实类别对应的 \alpha_{ij} 就要尽可能大,这意味着给正确的类分配更多的evidence/belief mass。

上述loss对应于PAC-learning中的Bayes classifier,而以下要介绍的是Gibbs classifier;

For the cross-entropy loss, the Bayes risk will read (损失函数2):

\mathcal{L}_i(\Theta)=\\\int \left [\sum \limits_{j=1}^K-y_{ij}\textrm{log}(p_{ij}) \right ] \frac{1}{B(\boldsymbol{\alpha}_i)}\prod \limits_{j=1}^Kp_{ij}^{\alpha_{ij}-1}d\mathbf{p}_i =\sum \limits_{j=1}^Ky_{ij}(\psi(S_i)-\psi (\alpha_{ij}))

\psi (\cdot ) 为digamma函数。

同样的方法也可以应用于误差平方和(损失函数3):

\mathcal{L}_i(\Theta)=\int \left \| \mathbf{y}_i-\mathbf{p}_i \right \|_2^2 \frac{1}{B(\boldsymbol{\alpha}_i)}\prod \limits_{j=1}^Kp_{ij}^{\alpha_{ij}-1}d\mathbf{p}_i \\=\sum \limits_{j=1}^K \mathbb{E}\left [ y_{ij}^2-2y_{ij}p_{ij}+p_{ij}^2 \right ] =\sum \limits_{j=1}^K(y_{ij}^2-2y_{ij}\mathbb{E}\left [ p_{ij} \right ]+\mathbb{E}\left [ p_{ij}^2 \right ] )

在这三种损失函数中,作者使用了最后一种(误差平方和),原因是实验发现其它两种会产生过高的belief mass并且性能不稳定,而对于这里面蕴含的理论研究留给未来工作。

关于最后一种损失的优点,贴一段原文:

👆损失函数可以被分解为一阶矩与二阶矩,最小化训练集中所有样本的prediction error和variance,并且优先考虑误差,方差其次。关于这一点,下面的Proposition给出了保证:

总而言之,根据损失函数3对网络进行优化,可以使一个样本的正确类别获得更多的证据,并去除其它类别的证据从而避免错误分类;此外,在预测误差较小的前提下,还可以减小方差(误差的优先级高于方差)。有关这几个命题的证明请参阅原论文的补充材料。

神经网络可能会为错误的标签生成一些证据。此时如果网络能正确分类样本——也就是说,对于正确类别的evidence高于其它类别的evidence——那么这些误导性的证据可能并不成问题;然而,对于无法正确分类的样本,我们希望总evidence趋向于零——也就是说,当网络对样本无法做出明确分类时,希望网络对所有可能类别的预测都趋于均匀(即不确定性较高),这个时候对应于:

\boldsymbol{\alpha}_i=\left \langle 1,...,1 \right \rangle   u=1,S=K

具体的实现方式是在损失函数中添加KL divergence作为惩罚项/正则项,使得除了“有利证据”之外的那些证据更接近于均匀分布,即,防止给某个错误类别分配多的evidence,其它错误类别分配少的evidence——既然都是错误的,那就均匀分配,用来表示“I don't know”。

\mathcal{L}(\Theta)=\sum \limits_{i=1}^N\mathcal{L}_i(\Theta)+\lambda_t\sum \limits_{i=1}^NKL\left [ D(\mathbf{p_i|\tilde{\boldsymbol{\alpha_i}}}) \ ||\ D(\mathbf{p_i}|\left \langle 1,...,1 \right \rangle) \right ]

where \lambda_t=\mathop{min}(1.0,t/10)\in[0,1] is the annealing coefficient, t is the index of the current training epoch. \tilde{\boldsymbol{\alpha_i}}=\mathbf{y}_i+(1-\mathbf{y}_i)\odot \boldsymbol{\alpha}_i is the Dirichlet parameters after removal of the non-misleading evidence from predicted parameters αi for sample i —— \tilde{\boldsymbol{\alpha_i}} 的第 j 维(正确类别所在的维度)是1,其它维是 \boldsymbol{\alpha}_i 原来的值(只惩罚misleading evidence),并通过退火系数逐渐增加KL divergence对损失的影响。

三、实验及结果

Accuracy与其它方法comparable,这代表着对于uncertainty的扩展并不会影响模型精度;并且这个表格也不能完全说明问题,因为uncertainty=1的时候也当作是预测错误,但事实上这时候模型回答的是“I don't know”,而不是给出一个错误答案。

横坐标是阈值,代表超过此阈值的uncertainty对应的预测全部视为“I don't know”;纵坐标是accuracy。

左图:在MNIST训练集上训练模型,在notMNIST数据集上测试(该数据集包含字母而不是数字);

右图:在CIFAR-10的前五个类别上训练,最后五个类别上测试。

在图中靠近右下角的曲线表现更好,表明在所有的预测中能给出最大的熵值。由图可见,EDL最优。

👆在对抗样本上的实验(MNIST and CIFAR-5)

Dropout对于对抗样本有最高的accuracy(左侧图);然而它对所有预测都过于自信(右侧图)。也就是说,它对错误的预测同样给出了很高的置信度;除了EDL的其它模型也是类似的。

相反,EDL在uncertainty和准确率之间取得了很好的compromise。它对错误的预测赋予了非常高的uncertainty。


四、总结

作者从证据理论出发,假设类别的预测结果服从Dirichlet distribution,并使用神经网络输出“主观意见”,从而计算得到Dirichlet distribution的参数,最后使用得到的参数对预测类别及uncertainty进行估计;与标准神经网络使用softmax得到的点估计相比,额外提供了预测不确定性,使模型获得了描述“I don't know”的能力。


参考文献

  1. Dempster, A. P. Generalization of Bayesian Inference. Journal of the Royal Statistical Society. Series B 30, 1968:205-247.

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

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

相关文章

新火种AI|AI正在让汽车成为“消费电子产品”

作者:一号 编辑:小迪 AI正在让汽车产品消费电子化 12月28日,铺垫许久的小米汽车首款产品——小米SU7正式在北京亮相。命里注定要造“电车”的雷军,在台上重磅发布了小米的五大自研核心技术。在车型设计、新能源技术以及智能科技…

算法专题四:前缀和

前缀和 一.一维前缀和(模板):1.思路一:暴力解法2.思路二:前缀和思路 二. 二维前缀和(模板):1.思路一:构造前缀和数组 三.寻找数组的中心下标:1.思路一:前缀和 四.除自身以外数组的乘积&#xff…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆下载资源链接&#x1f4…

nacos入门篇001-安装与启动

1、下载zip包 我这里下载的是版本2.2.0 Nacos 快速开始 2、修改配置文件 2.1集群模式修改成单例模式 vi startup.sh 2.2 修改数据库配置信息 3、初始化数据库 3.1 创建db名称:db_nacos 3.2 执行mysql-schema.sql 3.3 执行完截图: 4、运行脚本启动 …

leetcode贪心算法题总结(二)

本节目录 1.最长回文串2.增减字符串匹配3.分发饼干4.最优除法5.跳跃游戏II6.跳跃游戏7.加油站8.单调递增的数字9.坏了的计算器 1.最长回文串 最长回文串 class Solution { public:int longestPalindrome(string s) {//计数一:用数组模拟哈希表int hash[127] {0}…

SimpleCG小游戏开发系列(2)--贪吃蛇

一、前言 在之前的C语言小游戏开发系列我们已经介绍了扫雷游戏的开发,本篇我们继续此系列第二篇,同样是比较简单但好玩的一个游戏--贪吃蛇。因为有了之前的游戏框架,我们只需要直接搬来原来的框架即可,可以省去不少活。 先看看游…

命令行创建Vue项目

Vue项目创建 1. 打开UI界面 在命令行中,执行如下指令: vue ui 2. 打开项目管理器 3. 创建项目 创建项目的过程,需要联网进行,这可能会耗时比较长的时间,请耐心等待。 windows的命令行,容易卡顿&#xff0c…

使用Node Exporter采集主机数据

安装 Node Exporter 在 Prometheus 的架构设计中,Prometheus Server 并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的 CPU 使用率,我们…

3D 渲染如何帮助电商促进销售?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 3D 渲染图像因其高转化率而成为亚马逊卖家的最新趋势。它是电子商务平…

Linux 线程安全 (1)

文章目录 线程互斥概念互斥实际使用互斥锁的原理死锁问题说明 线程互斥概念 执行流 执行流是指操作系统对进程或线程的调度和执行顺序。它决定了程序中的指令按照何种顺序被执行。 现阶段可以粗浅的理解为,执行流决定执行哪个线程或进程的代码(或者说执行流决定了…

MyBatis标签及其应用示例

MyBatis标签及其应用示例 1. select 1.1 标签属性 id唯一的标识符parameterType传给此语句的参数的全路径名或别名如:com.xxx.xxx.demo.entity.User或userresultType语句返回值类型或别名。如果是集合List,此处填写集合的泛型T,而不是集合…

人机交互中信息数量与质量

在人机交互中,信息的数量和质量都是非常重要的因素。 信息的数量指的是交互过程中传递的信息的多少。信息的数量直接影响到交互的效率和效果,如果交互中传递的信息量太少,可能导致交互过程中的信息不足,用户无法得到想要的结果或者…

js实时监听input输入框值的变化

实习日记之通过调用common chemistry的api接口实现输入keyword查找cas号和mw。做了一个简单的html网页&#xff0c;用到了ajax技术。比较简单&#xff0c;适合刚入门的宝学习参考。代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&l…

面试算法78:合并排序链表

题目 输入k个排序的链表&#xff0c;请将它们合并成一个排序的链表。 分析&#xff1a;利用最小堆选取值最小的节点 用k个指针分别指向这k个链表的头节点&#xff0c;每次从这k个节点中选取值最小的节点。然后将指向值最小的节点的指针向后移动一步&#xff0c;再比较k个指…

cleanmymac这个软件怎么样?值不值得下载

cleanmymac是我必装的mac端清理软件&#xff0c;界面简洁好看&#xff0c;完美适配mac系统&#xff0c;文件清理的速度、精度都比较优秀&#xff0c;还是比较不错的呢。cleanmymac作为一款第三方清洁应用程序&#xff0c;具有专业完整的清理功能&#xff0c;包括释放内存、一键…

Halcon阈值处理的几种分割方法threshold/auto_threshold/binary_threshold/dyn_threshold

Halcon阈值处理的几种分割方法 文章目录 Halcon阈值处理的几种分割方法1. 全局阈值2. 基于直方图的自动阈值分割方法3. 自动全局阈值分割方法4. 局部阈值分割方法5. var_threshold算子6 . char_threshold 算子7. dual_threshold算子 在场景中选择物体或特征是图像测量或识别的重…

FairyGUI-Cocos Creator官方Demo源码解读

博主在学习Cocos Creator的时候&#xff0c;发现了一款免费的UI编辑器FairyGUI。这款编辑器的能力十分强大&#xff0c;但是网上的学习资源比较少&#xff0c;坑比较多&#xff0c;主要学习方式就是阅读官方文档和练习官方Demo。这里博主进行官方Demo的解读。 从gitee上克隆项目…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(15)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;14&#xff09; 1.3 PCI总线的存储器读写总线事务 1.3.4 PCI读写主存储器 前文已提到&#xff0c;由于本节内容较长&#xff0c;因此将后一部分内容放在本文中。 为…

基于Python、Keras和OpenCV的实时人脸活体检测

你在互联网上找到的大多数人脸识别算法和研究论文都遭受照片攻击。这些方法在检测和识别来自网络摄像头的图像、视频和视频流中的人脸方面非常有效。然而&#xff0c;他们无法区分现实生活中的面孔和照片上的面孔。这种无法识别人脸的现象是由于这些算法在二维帧上工作。 现在…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组&#xff1f; 字面理解就是 数字的组合 其实不太准确&#xff0c;准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面&#xff0c;按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组&#xff0c;存储着一些数据的集合 …