损失函数,基于概率分布度量的损失函数,信息量,信息熵的作用

目录

损失函数中为什么要用Log:概率损失函数-乘法转加法-便于求偏导

信息量,信息熵的作用

信息的作用是消除不确定性:信息量是0,事件确定

 回答只是Y,N,因此对数底数为2​编辑

 一句话描述的事件发生的概率越低,那么它含有的信息量就越大

系统内所有事件发生时提供的信息量与它发生概率的乘积进行累加​编辑

损失函数

损失函数的概念

损失函数的作用

机器学习中常用的损失函数

基于距离度量的损失函数

均方误差损失函数(MSE)

L2损失函数

L1损失函数

Smooth L1损失函数

huber损失函数

0-1损失函数

铰链/折页损失函数

基于概率分布度量的损失函数

KL散度函数(相对熵)

交叉熵损失公式:带有对数的都是概率

softmax损失函数公式

Focal loss

图示理解损失函数

用二维函数图像理解单变量对损失函数的影响

用等高线图理解双变量对损失函数影响

常用的损失函数

均方差损失函数:平方放大误差引起足够重视

工作原理

实际案例

损失函数的可视化

损失函数值的3D示意图

损失函数值的2D示意图

交叉熵损失函数

交叉熵的由来

二分类问题交叉熵

多分类问题交叉熵

为什么不能使用均方差做为分类问题的损失函数?

如何选择损失函数?


损失函数中为什么要用Log:概率损失函数-乘法转加法-便于求偏导

​Loss 在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上log,这样便可以将连乘转化为求和,求和形式更容易求偏导,应用到梯度下降中求最优解;

由于log函数是单调递增函数,因此不会改变优化结果。

极大似然估计中取对数的原因:取对数后,连乘可以转化为相加,方便求导,这是因为对数函数的求导更加简单,对数函数的导数比原函数更容易计算和优化;除此之外对数函数 ln为单调递增函数,不会改变似然函数极值点。

为什么对数可以将乘法转化为加法?
log2(x*y) = log2(y) + log2(y)

1, 2 ,3 ,4,5, 6······

和指数序列

2^(1), 2^(2) ,2^(3) ,2^(4),2^(5), 2^(6)······

,可以看出上一序列是下一序列的指数部分。那么我们如果想计算2*8 = (2^(1))*(2^(3))就可以将指数部分先加起来,即1+3=4,然后找第二个序列进行对应,就得到了2^(4)=16。这就是对数里的思想啦。

信息量,信息熵的作用

信息的作用是消除不确定性:信息量是0,事件确定

 

 回答只是Y,N,因此对数底数为2

 一句话描述的事件发生的概率越低,那么它含有的信息量就越大

因为它帮我们排除的不确定性越大

 

 

 

 

 

系统内所有事件发生时提供的信息量与它发生概率的乘积进行累加

 

信息量是指信息的有用性,是确定某一事件发生的概率与其不发生的概率之差信息量越大,说明这个事件越具有分类能力。

信息熵是指随机变量不确定性的度量,它表示了随机变量取值不同的概率分布的平均信息量。信息熵越大,说明随机变量取值的不确定性越大。

信息量和信息熵常用于信息学、信息论、模式识别等领域。它们主要用于衡量随机变量的不确定性和信息的有用性。

信息量和信息熵可用于评估分类器的效果,在决策树中用来评估特征的重要性,在信息压缩中用来评估压缩效果,在编码中用来评估编码效率等。

损失函数

监督学习中的损失函数常用来评估样本的真实值和模型预测值之间的不一致程度,一般用于模型的参数估计。受应用场景、数据集和待求解问题等因素的制约,现有监督学习算法使用的损失函数的种类和数量较多,而且每个损失函数都有各自的特征,因此要从众多损失函数中选择适合求解问题最优模型的损失函数。

损失函数的概念

在各种材料中经常看到的中英文词汇有:误差,偏差,Error,Cost,Loss,损失,代价......意思都差不多,在本文中,使用“损失函数”和“Loss Function”这两个词汇,具体的损失函数符号用  来表示,误差值用表示。

“损失”就是所有样本的“误差”的总和,亦即(为样本数):

损失误差

严谨来说,如果我们说“某个样本的损失”是不对的,只能说“某个样本的误差”,因为样本是一个一个计算的。如果我们把神经网络的参数调整到完全满足某个独立样本的输出误差为0,通常会使得其它样本的误差变得更大,这样作为误差之和的损失函数值,就会变得更大。所以,我们通常会在根据某个样本的误差调整权重后,计算一下整体样本的损失函数值,来判定网络是不是已经训练到了可接受的状态。

损失函数的作用

损失函数的作用,就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行。

如何使用损失函数呢?具体步骤:

  1. 用随机值初始化前向计算公式的参数;

  2. 代入样本,计算输出的预测值;

  3. 用损失函数计算预测值和标签值(真实值)的误差;

  4. 根据损失函数的导数,沿梯度最小方向将误差回传,修正前向计算公式中的各个权重值

  5. goto 步骤2,直到损失函数值达到一个满意的值就停止迭代。

机器学习中常用的损失函数

本文依据损失函数度量方式的不同,将主要损失函数分为

  • 基于距离度量的损失函数
  • 基于概率分布度量的损失函数。

基于距离度量的损失函数

基于距离度量的损失函数通常将输入数据映射到基于距离度量的特征空间上,如欧氏空间、汉明空间等,将映射后的样本看作空间上的点,采用合适的损失函数度量特征空间上样本真实值和模型预测值之间的距离。特征空间上两个点的距离越小,模型的预测性能越好。

图片

均方误差损失函数(MSE)

图片

在回归问题中,均方误差损失函数用于度量样本点到回归曲线的距离,通过最小化平方损失使样本点可以更好地拟合回归曲线。均方误差损失函数(MSE)的值越小,表示预测模型描述的样本数据具有越好的精确度。

由于无参数、计算成本低和具有明确物理意义等优点,MSE已成为一种优秀的距离度量方法。尽管MSE在图像和语音处理方面表现较弱,但它仍是评价信号质量的标准,在回归问题中,MSE常被作为模型的经验损失或算法的性能指标。

代码实现:

import numpy as np
# 自定义实现
def MSELoss(x:list,y:list):
    """
    x:list,代表模型预测的一组数据
    y:list,代表真实样本对应的一组数据
    """
    assert len(x)==len(y)
    x=np.array(x)
    y=np.array(y)
    loss=np.sum(np.square(x - y)) / len(x)
    return loss

#计算过程举例
x=[1,2]
y=[0,1]
loss=((1-0)**2 + (2-1)**2)÷2=(1+1)÷2=1

L2损失函数

图片

L2损失又被称为欧氏距离,是一种常用的距离度量方法,通常用于度量数据点之间的相似度。由于L2损失具有凸性和可微性,且在独立、同分布的高斯噪声情况下,它能提供最大似然估计,使得它成为回归问题、模式识别、图像处理中最常使用的损失函数。

代码实现:

import numpy as np
# 自定义实现
def L2Loss(x:list,y:list):
    """
    x:list,代表模型预测的一组数据
    y:list,代表真实样本对应的一组数据
    """
    assert len(x)==len(y)
    x=np.array(x)
    y=np.array(y)
    loss=np.sqrt(np.sum(np.square(x - y)) / len(x))
    return loss

L1损失函数

图片

L1损失又称为曼哈顿距离或绝对值损失函数,表示残差的绝对值之和。L1损失函数对离群点有很好的鲁棒性,但它在残差为零处却不可导。另一个缺点是更新的梯度始终相同,也就是说,即使很小的损失值,梯度也很大,这样不利于模型的收敛。针对它的收敛问题,一般的解决办法是在优化算法中使用变化的学习率,在损失接近最小值时降低学习率。

代码实现:

import numpy as np
# 自定义实现
def L1Loss(x:list,y:list):
    """
    x:list,代表模型预测的一组数据
    y:list,代表真实样本对应的一组数据
    """
    assert len(x)==len(y)
    x=np.array(x)
    y=np.array(y)
    loss=np.sum(np.abs(x - y)) / len(x)
    return loss

Smooth L1损失函数

图片

Smooth L1损失是由Girshick R在Fast R-CNN中提出的,主要用在目标检测中防止梯度爆炸

代码实现:

# 自定义实现
def Smooth_L1(x,y):
    assert len(x)==len(y)
    loss=0
    for i_x,i_y in zip(x,y):
        tmp = abs(i_y-i_x)
        if tmp<1:
            loss+=0.5*(tmp**2)
        else:
            loss+=tmp-0.5
    return loss

huber损失函数

图片

huber损失是平方损失和绝对损失的综合,它克服了平方损失和绝对损失的缺点,不仅使损失函数具有连续的导数,而且利用MSE梯度随误差减小的特性,可取得更精确的最小值。尽管huber损失对异常点具有更好的鲁棒性,但是,它不仅引入了额外的参数,而且选择合适的参数比较困难,这也增加了训练和调试的工作量。

代码实现:

delta=1.0  # 先定义超参数
# 自定义实现
def huber_loss(x,y):
    assert len(x)==len(y)
    loss=0
    for i_x,i_y in zip(x,y):
        tmp = abs(i_y-i_x)
        if tmp<=delta:
            loss+=0.5*(tmp**2)
        else:
            loss+=tmp*delta-0.5*delta**2
    return loss

0-1损失函数

图片

0-1损失函数相等这个条件太过严格,可以放宽条件,即满足时认为相等:

图片

其中为参数,在感知机算法中。

尽管0-1损失函数存在误分类的情况,但是,当所有样本完全远离分隔线时,0-1损失函数可能是最好的选择,也就是说,0-1损失函数在对称或均匀噪声 的数据集上具有较好的鲁棒性。

铰链/折页损失函数

铰链损失(hinge loss)也被称为合页损失或折页损失,它最初用于求解最大间隔的二分类问题。铰链损失函数是一个分段连续函数,当 和的符号相同时,预测结果正确;当和的符号相反时,铰链损失随着的增大线性增大。铰链损失函数最著名的应用是作为支持向量机(support vector machine,SVM)的目标函数,其性质决定了SVM具有稀疏性,也就是说,分类正确但概率不足 1 和分类错误的样本被识别为支持向量,用于划分决策边界,其余分类完全正确的样本没有参与模型求解。

图片

基于概率分布度量的损失函数

基于概率分布度量的损失函数是将样本间的相似性转化为随机事件出现的可能性,即通过度量样本的真实分布与它估计的分布之间的距离,判断两者的相似度,一般用于涉及概率分布或预测类别出现的概率的应用问题中,在分类问题中尤为常用。

图片

KL散度函数(相对熵)

图片

公式中代表真实值,代表预测值。

KL散度( Kullback-Leibler divergence)也被称为相对熵,是一种非对称度量方法,常用于度量两个概率分布之间的距离。KL散度也可以衡量两个随机分布之间的距离,两个随机分布的相似度越高的,它们的KL散度越小,当两个随机分布的差别增大时,它们的KL散度也会增大,因此KL散度可以用于比较文本标签或图像的相似性。

基于KL散度的演化损失函数有JS散度函数。JS散度也称JS距离,用于衡量两个概率分布之间的相似度,它是基于KL散度的一种变形,消除了KL散度非对称的问题,与KL散度相比,它使得相似度判别更加准确。

相对熵是恒大于等于0的。当且仅当两分布相同时,相对熵等于0。

代码实现:

# 自定义实现
def kl_loss(y_true:list,y_pred:list):
    """
    y_true,y_pred,分别是两个概率分布
    比如:px=[0.1,0.2,0.8]
          py=[0.3,0.3,0.4]
    """
    assert len(y_true)==len(y_pred)
    KL=0
    for y,fx in zip(y_true,y_pred):
        KL+=y*np.log(y/fx)
    return KL

 

交叉熵损失公式:带有对数的都是概率

图片

交叉熵是信息论中的一个概念,最初用于估算平均编码长度,引入机器学习后,用于评估当前训练得到的概率分布与真实分布的差异情况。为了使神经网络的每一层输出从线性组合转为非线性逼近,以提高模型的预测精度,在以交叉熵为损失函数的神经网络模型中一般选用tanh、sigmoid、softmax或ReLU作为激活函数。

交叉熵损失函数刻画了实际输出概率与期望输出概率之间的相似度,也就是交叉熵的值越小,两个概率分布就越接近,特别是在正负样本不均衡的分类问题中,常用交叉熵作为损失函数。目前,交叉熵损失函数是卷积神经网络中最常使用的分类损失函数,它可以有效避免梯度消散。在二分类情况下也叫做对数损失函数

代码实现:

# 自定义实现
def CrossEntropy_loss(y_true:list,y_pred:list):
    """
    y_true,y_pred,分别是两个概率分布
    比如:px=[0.1,0.2,0.8]
          py=[0.3,0.3,0.4]
    """
    assert len(y_true)==len(y_pred)
    loss=0
    for y,fx in zip(y_true,y_pred):
        loss+=-y * np.log(fx)
    return loss

当正负样本不均衡的时候,通常会在交叉熵损失函数类别前面加个参数:

图片

softmax损失函数公式

图片

从标准形式上看,softmax损失函数应归到对数损失的范畴,在监督学习中,由于它被广泛使用,所以单独形成一个类别。softmax损失函数本质上是逻辑回归模型在多分类任务上的一种延伸,常作为CNN模型的损失函数。softmax损失函数的本质是将一个k维的任意实数向量x映射成另一个k维的实数向量,其中,输出向量中的每个元素的取值范围都是(0,1),即softmax损失函数输出每个类别的预测概率。由于softmax损失函数具有类间可分性,被广泛用于分类、分割、人脸识别、图像自动标注和人脸验证等问题中,其特点是类间距离的优化效果非常好,但类内距离的优化效果比较差。

softmax损失函数具有类间可分性,在多分类和图像标注问题中,常用它解决特征分离问题。在基于卷积神经网络的分类问题中,一般使用softmax损失函数作为损失函数,但是softmax损失函数学习到的特征不具有足够的区分性,因此它常与对比损失或中心损失组合使用,以增强区分能力。

代码实现:

# 自定义实现
def softmax(x):
    x_exp = np.exp(x)
    x_sum = np.sum(x_exp, axis=1, keepdims=True)
    s = x_exp / x_sum
    return s

Focal loss

focal loss的引入主要是为了解决难易样本不均衡的问题,注意有区别于正负样本不均衡的问题。难易样本分为四个类型:

正难正易
负难负易

易分样本虽然损失很低,但是数量太多,对模型的效果提升贡献很小,模型应该重点关注那些难分样本,因此需要把置信度高的损失再降低一些。

图片

图示理解损失函数

用二维函数图像理解单变量对损失函数的影响

图片

单变量的损失函数图

用等高线图理解双变量对损失函数影响

 

图片

双变量的损失函数图

常用的损失函数

  • 均方差损失函数,主要用于回归问题。

  • 交叉熵损失函数,主要用于分类问题。

二者都是非负函数,极值在底部,用梯度下降法可以求解。

是样本数,是预测值,是样本标签值,是单个样本的误差值,是损失函数值。

均方差损失函数:平方放大误差引起足够重视

均方差(mean square error,MSE)是最直观的一个损失函数,计算预测值和真实值之间的欧氏距离。预测值和真实值越接近,两者的均方差就越小。

均方差损失函数常用语线性回归(linear regression),即函数拟合(function fitting)。

 

工作原理

想要得到预测值和真实值的差距,最朴素的想法就是求差值。对于单样本来说,求差值没有问题,但是多样本累计时,就有可能有正有负,误差求和时就会导致相互抵消,从而失去价值。所以有了绝对差值的想法,即。这看上去很简单,并且也很理想,那为什么还要引入均方差损失函数呢?

图片

因为平方放大了误差,也放大了某个样本的局部损失对全局带来的影响,即对某些偏离大的样本比较敏感,从而引起监督学习训练过程的足够重视,以便回传误差。

实际案例

假设有一组数据如图所示,我们想找到一条拟合的直线。

 

图片

平面上的样本数据

下图前三张显示了一个逐渐找到最佳拟合直线的过程。

  • 第一张,用均方差函数计算得到Loss=0.53;

  • 第二张,直线向上平移一些,误差计算Loss=0.16,比图一的误差小很多;

  • 第三张,又向上平移了一些,误差计算Loss=0.048,此后还可以继续尝试平移(改变值)或者变换角度(改变值),得到更小的损失函数值;

  • 第四张,偏离了最佳位置,误差值Loss=0.18,这种情况,算法会让尝试方向反向向下。

图片

损失函数值与直线位置的关系

第三张图损失函数值最小的情况。比较第二张和第四张图,由于均方差的损失函数值都是正值,如何判断是向上移动还是向下移动呢?

在实际的训练过程中,是没有必要计算损失函数值的,因为损失函数值会体现在反向传播的过程中。我们来看看均方差函数的导数:

 

 

图片

固定w时,b的变化造成的损失值

我们假设该拟合直线的方程是,当我们固定,把值从1到3变化时,看看损失函数值的变化如下图所示。

图片

固定b时,w的变化造成的损失值

损失函数的可视化

损失函数值的3D示意图

横坐标为w,纵坐标为b,针对每一个和一个的组合计算出一个损失函数值,用三维图的高度来表示这个损失函数值。下图中的底部并非一个平面,而是一个有些下凹的曲面,只不过曲率较小,如下图。

图片

w和b同时变化时的损失值形成的曲面

损失函数值的2D示意图

在平面地图中,我们经常会看到用等高线的方式来表示海拔高度值,下图就是上图在平面上的投影,即损失函数值的等高线图,如下图所示。

图片

损失函数的等高线图

交叉熵损失函数

交叉熵(cross entropy)是香农(Shannon)信息论中一个重要概念,主要用于度量两个概率分布之间的差异性信息。在信息论中,交叉熵是表示两个概率分布p,q的差异,其中p表示真实分布,表示预测分布,那么H(p,q)就称为交叉熵。

 

交叉熵可以在神经网络中作为损失函数,p表示真实标记的分布,q表示训练后的模型的预测标记分布,交叉熵损失函数可以衡量与p之q间的相似性。

交叉熵损失函数常用于逻辑回归(logistic regression),也就是分类(classification)任务。

交叉熵的由来

  1. 信息量

 信息量越大,情况越多越混乱-事件不可能发生

编号事件概率 信息量 
x1优秀p=0.7I=-ln(0.7)=0.36
x2及格p=0.2I=-ln(0.2)=1.61
x3不及格p=0.1I=-ln(0.1)=2.30

不难看出该同学不及格的信息量较大,相对来说“优秀”事件的信息量反而小了很多。

相对熵(KL散度)

 交叉熵

 

  • 交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。

  • 交叉熵的值越小,模型预测效果就越好

  • 交叉熵经常搭配softmax使用,将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。

二分类问题交叉熵

 

图片

二分类交叉熵损失函数图

 

多分类问题交叉熵

 

为什么不能使用均方差做为分类问题的损失函数?

回归问题通常用均方差损失函数,可以保证损失函数是个凸函数,即可以得到最优解。

分类问题如果用均方差的话,损失函数的表现不是凸函数,就很难得到最优解。而交叉熵函数可以保证区间内单调。

分类问题的最后一层网络,需要分类函数,Sigmoid或者Softmax,如果再接均方差函数的话,其求导结果复杂,运算量比较大。

用交叉熵函数的话,可以得到比较简单的计算结果,一个简单的减法就可以得到反向误差。

如何选择损失函数?

通常情况下,损失函数的选取应从以下方面考虑:

  1. 选择最能表达数据的主要特征来构建基于距离或基于概率分布度量的特征空间。

  2. 选择合理的特征归一化方法,使特征向量转换后仍能保持原来数据的核心内容。

  3. 选取合理的损失函数,在实验的基础上,依据损失不断调整模型的参数,使其尽可能实现类别区分。

  4. 合理组合不同的损失函数,发挥每个损失函数的优点,使它们能更好地度量样本间的相似性。

  5. 将数据的主要特征嵌入损失函数,提升基于特定任务的模型预测精确度

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32--ADC模数转换

文章目录 ADC简介逐次逼近型ADCADC框图转换模式数据对齐转换时间校准ADC基本结构ADC单通道工程代码&#xff1a; ADC简介 STM32的ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器&#xff0c;是一种逐次逼近型模拟数字转换器&#xff0c;可以将引脚上连续…

C++中机器人应用程序的行为树(ROS2)

马库斯布赫霍尔茨 一、说明 以下文章为您提供了对机器人应用程序或框架中经常使用的行为树的一般直觉&#xff1a;ROS&#xff0c;Moveit和NAV2。了解行为 Tress &#xff08;BT&#xff09; 框架的原理为您提供了在游戏领域应用知识的绝佳机会。BT可以与Unity或Unreal集成。 由…

操作符详解(1)

1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1. 除了 % 操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2. 对…

springboot 项目日志配置文件详解

spring boot 项目指定 日志配置文件 在Spring Boot项目中&#xff0c;可以通过在application.properties或application.yml文件中指定日志配置文件来配置日志。 1. 使用application.properties文件&#xff1a; 在application.properties中&#xff0c;您可以使用以下属性来…

元核云私募双录助力私募基金业务高效合规

近年来&#xff0c;私募基金监管政策不断收紧&#xff0c;今年7月发布的《私募投资基金监督管理条例》更是把私募投资基金业务活动纳入法治化、规范化轨道进行监管。 作为保障私募基金业务透明合规的重要手段&#xff0c;“双录”一直是私募流程中非常重要的一环&#xff0c;多…

三、SQL注入之报错注入

文章目录 1、 xpath语法&#xff08;1&#xff09;extractvalue&#xff08;2&#xff09;updatexml 2、concatrand()group by()导致主键重复 报错注入就是利用了数据库的某些机制&#xff0c;人为地制造错误条件&#xff0c;使得查询结果能够出现在错误信息中。这里主要介绍报…

动漫3D虚拟人物制作为企业数字化转型提供强大动力

一个 3D 虚拟数字人角色的制作流程&#xff0c;可以分为概念设定-3D 建模-贴图-蒙皮-动画-引擎测试六个步骤&#xff0c;涉及到的岗位有原画师、模型师、动画师等。角色概念设定、贴图绘制一般是由视觉设计师来完成;而建模、装配(骨骼绑定)、渲染动画是由三维设计师来制作完成。…

⛳ TCP 协议面试题

目录 ⛳ TCP 协议面试题&#x1f43e; 一、为什么关闭连接的需要四次挥⼿&#xff0c;⽽建⽴连接却只要三次握⼿呢&#xff1f;&#x1f3ed; 二、为什么连接建⽴的时候是三次握⼿&#xff0c;可以改成两次握⼿吗&#xff1f;&#x1f463; 三、为什么主动断开⽅在TIME-WAIT状态…

wustojc3001求三角形面积

#include <stdio.h> #include <math.h> int main() {float a,b,c,d;double s;scanf("%f%f%f",&a,&b,&c);if(ab>c&&ac>b&&cb>a){d(abc)/2;ssqrt(d*(d-a)*(d-b)*(d-c));//数学公式printf("%.2f",s);}retur…

(成功踩坑)electron-builder打包过程中报错

目录 注意&#xff1a;文中的解决方法2&#xff0c;一定全部看完&#xff0c;再进行操作&#xff0c;有坑 背景 报错1&#xff1a; 报错2&#xff1a; 1.原因&#xff1a;网络连接失败 2.解决方法1&#xff1a; 3.解决方法2&#xff1a; 3.1查看缺少什么资源文件 3.2去淘…

软件开发bug问题跟踪与管理

一、Redmine 项目管理和缺陷跟踪工具 官网&#xff1a;https://www.redmine.org/ Redmine 是一个开源的、基于 Web 的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示&#xff0c;同时它又支持多项目管理。Redmine 是一个自由开源软件解决方案&#xff0c;…

如何将图片应用于所有的PPT页面?

问题&#xff1a;如何快速将图片应用到所有PPT页面&#xff1f; 解答&#xff1a;有两种方法可以解决这个问题。第一种用母板。第二种用PPT背景功能。 解决有时候汇报的时候&#xff0c;ppt中背景图片修改不了以及不知道如何查找&#xff0c;今天按照逆向过程进行操作 方法1…

详解C#-static void Main(string[] args)

目录 简介: 举例: 输出结果:​编辑 总结&#xff1a; 简介: 在C#中static void Main(string[] args)这个句话有什么作用&#xff0c;分别代表什么意思&#xff01;&#xff01; 这句话是入口函数的声明&#xff0c;指定了C#程序的入口点&#xff0c;并定义了一个名为”Mai…

Go语言GIN框架安装与入门

Go语言GIN框架安装与入门 文章目录 Go语言GIN框架安装与入门1. 创建配置环境2. 配置环境3. 下载最新版本Gin4. 编写第一个接口5. 静态页面和资源文件加载6. 各种传参方式6.1 URL传参6.2 路由形式传参6.3 前端给后端传递JSON格式6.4 表单形式传参 7. 路由和路由组8. 项目代码mai…

wustojc3006水果店收款

#include <stdio.h> int main() {double a,b,c,d,sum;scanf("%lf%lf%lf%lf",&a,&b,&c,&d);suma*2.5b*1.7c*2.0d*1.2;printf("%.2lf",sum);//注意保留几位小数return 0;}

图数据库_Neo4j学习cypher语言_常用函数_关系函数_字符串函数_聚合函数_数据库备份_数据库恢复---Neo4j图数据库工作笔记0008

然后再来看一些常用函数,和字符串函数,这里举个例子,然后其他的 类似 可以看到substring字符串截取函数 可以看到截取成功 聚合函数 这里用了一个count(n) 统计函数,可以看到效果 关系函数,我们用过就是id(r) 可以取出对应的r的id来这样..

Scratch 游戏 之 随机大地图生成教程

在很多生存 / 沙盒类游戏中&#xff0c;地图往往是随机生成的&#xff0c;例如&#xff1a;饥荒、我的世界等。那我们该如何在scratch中实现这一点呢&#xff1f; 在scratch中有两种办法可以实现——画笔和克隆体。我们这次先聊克隆体。 我们可以先将克隆体设置为方形的&#x…

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目&#xff08;链接&#xff1a;GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI&#xff09; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

.netcore grpc客户端工厂及依赖注入使用

一、客户端工厂概述 gRPC 与 HttpClientFactory 的集成提供了一种创建 gRPC 客户端的集中方式。可以通过依赖包Grpc.Net.ClientFactory中的AddGrpcClient进行gRPC客户端依赖注入AddGrpcClient函数提供了许多配置项用于处理一些其他事项&#xff1b;例如AOP、重试策略等 二、案…

azure VM完全复制

创建虚拟机&#xff0c;并创建linux服务&#xff0c;可以参考 https://blog.csdn.net/m0_48468018/article/details/132267096 &#xff0c; https://blog.csdn.net/m0_48468018/article/details/132267315在虚拟机中点击磁盘快照&#xff0c;创建磁盘快照 通过磁盘快照创建磁盘…