损失函数理解汇总,结合 PyTorch1.7 和 TensorFlow2

tf.keras.losses.Huber 损失函数 示例 Huber损失,平滑的平均绝对误差 Huber损失对数据中的异常点没有平方误差损失那么敏感。 本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数δ(delta)来控制。当Huber损失在[0-δ,0+δ]之间时,等价为MSE,而在[-∞,δ]和[δ,+∞]时为MAE。 loss = 0.5 * x^2 if |x| <= d loss = 0.5 * d^2 + d * (|x| - d) if |x| > 阅读详情

  作者丨DengBoCong@知乎

来源丨https://zhuanlan.zhihu.com/p/271911178

编辑丨极市平台

本文仅用于学术分享,如有侵权,请联系后台作删文处理。

本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致的了解以及使用。本文对原理只是浅尝辄止,不进行深挖,感兴趣的伙伴可以针对每个部分深入翻阅资料。

使用版本:

  • TensorFlow2.3

  • PyTorch1.7.0

01 交叉熵损失(CrossEntropyLoss)

对于单事件的信息量而言,当事件发生的概率越大时,信息量越小,需要明确的是,信息量是对于单个事件来说的,实际事件存在很多种可能,所以这个时候熵就派上用场了,熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。交叉熵用来描述两个分布之间的差距,交叉熵越小,假设分布离真实分布越近,模型越好。

在分类问题模型中(不一定是二分类),如逻辑回归、神经网络等,在这些模型的最后通常会经过一个sigmoid函数(softmax函数),输出一个概率值(一组概率值),这个概率值反映了预测为正类的可能性(一组概率值反应了所有分类的可能性)。而对于预测的概率分布和真实的概率分布之间,使用交叉熵来计算他们之间的差距,换句不严谨的话来说,交叉熵损失函数的输入,是softmax或者sigmoid函数的输出。交叉熵损失可以从理论公式推导出几个结论(优点),具体公式推导不在这里详细讲解,如下:

  • 预测的值跟目标值越远时,参数调整就越快,收敛就越快;

  • 不会陷入局部最优解

交叉熵损失函数的标准形式(也就是二分类交叉熵损失)如下:

其中,  表示样本  的标签,正类为1,负类为0,  表示样本  预测为正的概率。

多分类交叉熵损失如下:

其中,  表示类别的数量,  表示变量(0或1),如果该类别和样本  的类别相同就是1,否则是0,  表示对于观测样本  属于类别  的预测概率。

Tensorflow:

  • BinaryCrossentropy[1]:二分类,经常搭配Sigmoid使用

tf.keras.losses.BinaryCrossentropy(from_logits=False, label_smoothing=0, reduction=losses_utils.ReductionV2.AUTO, name='binary_crossentropy')参数:  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)  label_smoothing:[0,1]之间浮点值,加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • binary_crossentropy[2]

tf.keras.losses.binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)参数:  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)  label_smoothing:[0,1]之间浮点值,加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。
  • CategoricalCrossentropy[3]:多分类,经常搭配Softmax使用

tf.keras.losses.CategoricalCrossentropy(from_logits=False, label_smoothing=0, reduction=losses_utils.ReductionV2.AUTO, name='categorical_crossentropy')参数:  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)  label_smoothing:[0,1]之间浮点值,加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • categorical_crossentropy[4]

tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)参数:  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)  label_smoothing:[0,1]之间浮点值,加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。
  • SparseCategoricalCrossentropy[5]:多分类,经常搭配Softmax使用,和CategoricalCrossentropy不同之处在于,CategoricalCrossentropy是one-hot编码,而SparseCategoricalCrossentropy使用一个位置整数表示类别

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False, reduction=losses_utils.ReductionV2.AUTO, name='sparse_categorical_crossentropy')参数:  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • sparse_categorical_crossentropy[6]

tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1)
参数:
  from_logits:默认False。为True,表示接收到了原始的logits,为False表示输出层经过了概率处理(softmax)
  axis:默认是-1,计算交叉熵的维度

PyTorch:

  • BCELoss[7]

torch.nn.BCELoss(weight: Optional[torch.Tensor] = None, size_average=None, reduce=None, reduction: str = 'mean')参数:  weight:每个分类的缩放权重,传入的大小必须和类别数量一至  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  reduce:bool类型,返回值是否为标量,默认为True  reduction:string类型,'none' | 'mean' | 'sum'三种参数值
  • BCEWithLogitsLoss[8]:其实和TensorFlow是的`from_logits`参数很像,在BCELoss的基础上合并了Sigmoid

torch.nn.BCEWithLogitsLoss(weight: Optional[torch.Tensor] = None, size_average=None, reduce=None, reduction: str = 'mean', pos_weight: Optional[torch.Tensor] = None)参数:  weight:每个分类的缩放权重,传入的大小必须和类别数量一至  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  reduce:bool类型,返回值是否为标量,默认为True  reduction:string类型,'none' | 'mean' | 'sum'三种参数值  pos_weight:正样本的权重, 当p>1,提高召回率,当p<1,提高精确度。可达到权衡召回率(Recall)和精确度(Precision)的作用。
  • CrossEntropyLoss[9]

torch.nn.CrossEntropyLoss(weight: Optional[torch.Tensor]
 = None, size_average=None, ignore_index: int = -100,
reduce=None, reduction: str = 'mean')

参数:  weight:每个分类的缩放权重,传入的大小必须和类别数量一至  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  ignore_index:忽略某一类别,不计算其loss,其loss会为0,并且,在采用size_average时,不会计算那一类的loss,除的时候的分母也不会统计那一类的样本  reduce:bool类型,返回值是否为标量,默认为True  reduction:string类型,'none' | 'mean' | 'sum'三种参数值

02 KL散度

我们在计算预测和真实标签之间损失时,需要拉近他们分布之间的差距,即模型得到的预测分布应该与数据的实际分布情况尽可能相近。KL散度(相对熵)是用来衡量两个概率分布之间的差异。模型需要得到最大似然估计,乘以负Log以后就相当于求最小值,此时等价于求最小化KL散度(相对熵)。所以得到KL散度就得到了最大似然。又因为KL散度中包含两个部分,第一部分是交叉熵,第二部分是信息熵,即KL=交叉熵−信息熵。信息熵是消除不确定性所需信息量的度量,简单来说就是真实的概率分布,而这部分是固定的,所以优化KL散度就是近似于优化交叉熵。下面是KL散度的公式:

联系上面的交叉熵,我们可以将公式简化为(KL散度 = 交叉熵 - 熵):

监督学习中,因为训练集中每个样本的标签是已知的,此时标签和预测的标签之间的KL散度等价于交叉熵。

TensorFlow:

  • KLD | kullback_leibler_divergence[10]

tf.keras.losses.KLD(y_true, y_pred)
  • KLDivergence[11]

tf.keras.losses.KLDivergence(reduction=losses_utils.ReductionV2.AUTO, name='kl_divergence')参数:  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。

Pytorch:

  • KLDivLoss[12]

torch.nn.KLDivLoss(size_average=None, reduce=None, reduction: str = 'mean', log_target: bool = False)
参数:
  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和
  reduce:bool类型,返回值是否为标量,默认为True
  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean
  log_target:默认False,指定是否在日志空间中传递目标

03 平均绝对误差(L1范数损失)

L1范数损失函数,也被称为最小绝对值偏差(LAD),最小绝对值误差(LAE)。总的说来,它是把目标值  与估计值  的绝对差值的总和  最小化:

缺点:

  • 梯度恒定,不论预测值是否接近真实值,这很容易导致发散,或者错过极值点。

  • 导数不连续,导致求解困难。这也是L1损失函数不广泛使用的主要原因。

优点:

  • 收敛速度比L2损失函数要快,这是通过对比函数图像得出来的,L1能提供更大且稳定的梯度。

  • 对异常的离群点有更好的鲁棒性,下面会以例子证实。

TensorFlow:

  • MAE | mean_absolute_error[13]

tf.keras.losses.MAE(y_true, y_pred)
  • MeanAbsoluteError[14]

tf.keras.losses.MeanAbsoluteError(reduction=losses_utils.ReductionV2.AUTO, name='mean_absolute_error')参数:  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • MeanAbsolutePercentageError[15]:平均绝对百分比误差

tf.keras.losses.MeanAbsolutePercentageError(reduction=losses_utils.ReductionV2.AUTO, name='mean_absolute_percentage_error')公式:loss = 100 * abs(y_true - y_pred) / y_true参数:  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • MAPE | mean_absolute_percentage_error[16]:平均绝对百分比误差

tf.keras.losses.MAPE(y_true, y_pred)公式:loss = 100 * mean(abs((y_true - y_pred) / y_true), axis=-1)
  • Huber[17]

tf.keras.losses.Huber(delta=1.0, reduction=losses_utils.ReductionV2.AUTO, name='huber_loss')公式:error = y_true - y_pred参数:  delta:float类型,Huber损失函数从二次变为线性的点。  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。

PyTorch:

  • L1Loss[18]

torch.nn.L1Loss(size_average=None, reduce=None, reduction: str = 'mean')
参数:
  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和
  reduce:bool类型,返回值是否为标量,默认为True
  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean
  • l1_loss[19]

torch.nn.functional.l1_loss(input, target, size_average=None, reduce=None, reduction='mean')
  • SmoothL1Loss[20]:平滑版L1损失,也被称为 Huber 损失函数。

其中,当  时,  ,否则 

torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction: str = 'mean', beta: float = 1.0)参数:  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  reduce:bool类型,返回值是否为标量,默认为True  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean  beta:默认为1,指定在L1和L2损耗之间切换的阈值
  • smooth_l1_loss[21]

torch.nn.functional.smooth_l1_loss(input, target, size_average=None, reduce=None, reduction='mean', beta=1.0)

04 均方误差损失(L2范数损失)

L2范数损失函数,也被称为最小平方误差(LSE)。总的来说,它是把目标值  与估计值  的差值的平方和  最小化:

缺点:

  • 收敛速度比L1慢,因为梯度会随着预测值接近真实值而不断减小。

  • 对异常数据比L1敏感,这是平方项引起的,异常数据会引起很大的损失。

优点:

  • 它使训练更容易,因为它的梯度随着预测值接近真实值而不断减小,那么它不会轻易错过极值点,但也容易陷入局部最优。

  • 它的导数具有封闭解,优化和编程非常容易,所以很多回归任务都是用MSE作为损失函数。

TensorFlow:

  • MeanSquaredError[22]

tf.keras.losses.MeanSquaredError(reduction=losses_utils.ReductionV2.AUTO, name='mean_squared_error')
公式:loss = square(y_true - y_pred)
参数:
  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • MSE | mean_squared_error[23]

tf.keras.losses.MSE(y_true, y_pred)公式:loss = mean(square(y_true - y_pred), axis=-1)
  • MeanSquaredLogarithmicError[24]

tf.keras.losses.MeanSquaredLogarithmicError(reduction=losses_utils.ReductionV2.AUTO, name='mean_squared_logarithmic_error')
公式:loss = square(log(y_true + 1.) - log(y_pred + 1.))
参数:
  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • MSLE | mean_squared_logarithmic_error[25]

tf.keras.losses.MSLE(y_true, y_pred)
公式:loss = mean(square(log(y_true + 1) - log(y_pred + 1)), axis=-1)

PyTorch:

  • MSELoss[26]

torch.nn.MSELoss(size_average=None, reduce=None, reduction: str = 'mean')
参数:
  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和
  reduce:bool类型,返回值是否为标量,默认为True
  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean
  • mse_loss[27]

torch.nn.functional.mse_loss(input, target, size_average=None, reduce=None, reduction='mean')

05 Hinge loss

有人把hinge loss称为铰链损失函数,它可用于“最大间隔(max-margin)”分类,其最著名的应用是作为SVM的损失函数。hinge loss专用于二分类问题,标签值  ,预测值  。二分类问题的目标函数的要求如下:当  大于等于  或者小于等于  时,都是分类器确定的分类结果,此时的损失函数loss为0。而当预测值  时,分类器对分类结果不确定,loss不为0。显然,当  时,loss达到最大值。对于输出  ,当前  的损失为:

扩展到多分类问题上就需要多加一个边界值,然后叠加起来。公式如下:

Tensorflow:

  • CategoricalHinge[28]

tf.keras.losses.CategoricalHinge(reduction=losses_utils.ReductionV2.AUTO, name='categorical_hinge')
公式:loss = maximum(neg - pos + 1, 0) where neg=maximum((1-y_true)*y_pred) and pos=sum(y_true*y_pred)
参数:
  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • categorical_hinge[29]

tf.keras.losses.categorical_hinge(y_true, y_pred)
公式:loss = maximum(neg - pos + 1, 0) where neg=maximum((1-y_true)*y_pred) and pos=sum(y_true*y_pred)
  • Hinge[30]

tf.keras.losses.Hinge(
    reduction=losses_utils.ReductionV2.AUTO, name='hinge'
)
公式:loss = maximum(1 - y_true * y_pred, 0),y_true值应为-1或1。如果提供了二进制(0或1)标签,会将其转换为-1或1
参数:
  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • hinge[31]

tf.keras.losses.hinge(y_true, y_pred)公式:loss = mean(maximum(1 - y_true * y_pred, 0), axis=-1)
  • SquaredHinge[32]

tf.keras.losses.SquaredHinge(    reduction=losses_utils.ReductionV2.AUTO, name='squared_hinge')公式:loss = square(maximum(1 - y_true * y_pred, 0)),y_true值应为-1或1。如果提供了二进制(0或1)标签,会将其转换为-1或1。参数:  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • squared_hinge[33]

tf.keras.losses.squared_hinge(y_true, y_pred)公式:loss = mean(square(maximum(1 - y_true * y_pred, 0)), axis=-1)

‍PyTorch:

  • HingeEmbeddingLoss[34]:当  时,  ,当  时, 

torch.nn.HingeEmbeddingLoss(margin: float = 1.0, size_average=None, reduce=None, reduction: str = 'mean')参数:  margin:float类型,默认为1.  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  reduce:bool类型,返回值是否为标量,默认为True  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean

06 余弦相似度

余弦相似度是机器学习中的一个重要概念,在Mahout等MLlib中有几种常用的相似度计算方法,如欧氏相似度,皮尔逊相似度,余弦相似度,Tanimoto相似度等。其中,余弦相似度是其中重要的一种。余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。

余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感),公式如下:

Tensorflow:

  • CosineSimilarity[35]:请注意,所得值是介于-1和0之间的负数,其中0表示正交性,而接近-1的值表示更大的相似性。如果y_true或y_pred是零向量,则余弦相似度将为0,而与预测值和目标值之间的接近程度无关。

tf.keras.losses.CosineSimilarity(axis=-1, reduction=losses_utils.ReductionV2.AUTO, name='cosine_similarity')公式:loss = -sum(l2_norm(y_true) * l2_norm(y_pred))参数:  axis:默认-1,沿其计算余弦相似度的维  reduction:传入tf.keras.losses.Reduction类型值,默认AUTO,定义对损失的计算方式。
  • cosine_similarity[36]

tf.keras.losses.cosine_similarity(y_true, y_pred, axis=-1)公式:loss = -sum(l2_norm(y_true) * l2_norm(y_pred))参数:  axis:默认-1,沿其计算余弦相似度的维

PyTorch:

  • CosineEmbeddingLoss[37]:当  时,  ,当  时, 

torch.nn.CosineEmbeddingLoss(margin: float = 0.0, size_average=None, reduce=None, reduction: str = 'mean')参数:  margin:float类型,应为-1到1之间的数字,建议为0到0.5,默认值为0  size_average:bool类型,为True时,返回的loss为平均值,为False时,返回的各样本的loss之和  reduce:bool类型,返回值是否为标量,默认为True  reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean

7 总结

上面这些损失函数是我们在日常中经常使用到的,我将TensorFlow和PyTorch相关的API都贴出来了,也方便查看,可以作为一个手册文章,需要的时候点出来看一下。还有一些其他的损失函数,后续也会都加进来。


外链地址:

[1] https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy

[2] https://www.tensorflow.org/api_docs/python/tf/keras/losses/binary_crossentropy

[3] https://www.tensorflow.org/api_docs/python/tf/keras/losses/CategoricalCrossentropy

[4] https://www.tensorflow.org/api_docs/python/tf/keras/losses/categorical_crossentropy

[5] https://www.tensorflow.org/api_docs/python/tf/keras/losses/SparseCategoricalCrossentropy

[6] https://www.tensorflow.org/api_docs/python/tf/keras/losses/sparse_categorical_crossentropy

[7] https://pytorch.org/docs/stable/generated/torch.nn.BCELoss.html

[8] https://pytorch.org/docs/stable/generated/torch.nn.BCEWithLogitsLoss.html

[9] https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html

[10] https://www.tensorflow.org/api_docs/python/tf/keras/losses/KLD

[11] https://www.tensorflow.org/api_docs/python/tf/keras/losses/KLDivergence

[12] https://pytorch.org/docs/stable/generated/torch.nn.KLDivLoss.html

[13] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MAE

[14] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MeanAbsoluteError

[15] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MeanAbsolutePercentageError

[16] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MAPE

[17] https://www.tensorflow.org/api_docs/python/tf/keras/losses/Huber

[18] https://pytorch.org/docs/stable/generated/torch.nn.L1Loss.html

[19] https://pytorch.org/docs/stable/nn.functional.html?highlight=loss#torch.nn.functional.l1_loss

[20] https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html

[21] https://pytorch.org/docs/stable/nn.functional.html?highlight=loss#torch.nn.functional.smooth_l1_loss

[22] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MeanSquaredError

[23] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MSE

[24] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MeanSquaredLogarithmicError

[25] https://www.tensorflow.org/api_docs/python/tf/keras/losses/MSLE

[26] https://pytorch.org/docs/stable/generated/torch.nn.MSELoss.html

[27] https://pytorch.org/docs/stable/nn.functional.html?highlight=loss#torch.nn.functional.mse_loss

[28] https://www.tensorflow.org/api_docs/python/tf/keras/losses/CategoricalHinge

[29] https://www.tensorflow.org/api_docs/python/tf/keras/losses/categorical_hinge

[30] https://www.tensorflow.org/api_docs/python/tf/keras/losses/Hinge

[31] https://www.tensorflow.org/api_docs/python/tf/keras/losses/hinge

[32] https://www.tensorflow.org/api_docs/python/tf/keras/losses/SquaredHinge

[33] https://www.tensorflow.org/api_docs/python/tf/keras/losses/squared_hinge

[34] https://pytorch.org/docs/stable/generated/torch.nn.HingeEmbeddingLoss.html

[35] https://www.tensorflow.org/api_docs/python/tf/keras/losses/CosineSimilarity

[36] https://www.tensorflow.org/api_docs/python/tf/keras/losses/cosine_similarity

[37] https://pytorch.org/docs/stable/generated/torch.nn.CosineEmbeddingLoss.html

CrossEntropy交叉熵损失函数及softmax函数的理解 参考链接1 参考链接2 参考链接3 (一)什么是Sigmoid函数和softmax函数? 1、提到二分类问题容易想到逻辑回归算法,而逻辑回归算法最关键的步骤就是将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间,其中Sigmoid函数和softmax函数刚好具有这样的功能。 2、Sigmoid函数 当分类结果可以只用一个节点表述时,使用Sigmoid函数: ... 阅读详情

相关推荐

TensorFlow & PyTorch

TensorFlow 和 PyTorch 各有优势,这种差异主要源于它们的设计理念、应用场景和目标用户群体的不同。选择合适的框架需要综合考虑个人目标、项目需求以及对开发灵活性和部署能力的要求。

weixin_52397513的博客 1704

结合PyTorch和TensorFlow2 汇总理解损失函数

点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!作者:DengBoCong地址:https://www.zhihu.com/people/den...

idol24的博客 1703

深度学习在 NumPy、TensorFlow 和 PyTorch 中实现所有损失函数

损失函数有多种,深度学习开发平台也有许多,那么用多种平台实现多种损失函数,会有什么结论?本篇对比实现多种跨平台对多种损失函数的实现。

gongdiwudu的专栏 4149

Tensorflow中的损失函数loss汇总

回归和分类是监督学习中的两个大类。自学过程中,阅读别人代码时经常看到不同种类的损失函数,到底 Tensorflow 中有多少自带的损失函数呢,什么情况下使用什么样的损失函数?这次就来汇总介绍一下。 一、处理回归问题 1.tf.losses.mean_squared_error:均方根误差(MSE) —— 回归问题中最常用的损失函数 优点是便于梯度下降,误差大时下降快,误差小时下降慢,有利于函数收敛...

qionggaobi9328的博客 6836

Verilog——反相器

反相器代码: module inv( A, Y );//A,Y是端口 //定义端口属性 input A; output Y; //定义输入输出关系 assign Y=~A;//Y等于A的反 endmodule //inv是module的名字

weixin_41788560的博客 9501

【音视频处理】MP4、FLV、HLS适用范围,在线视频播放哪个更好

本期我们讨论在线点播的视频格式,对比这些视频格式的优劣以及原因 1、封装格式的作用 2、MP4 3、FLV 4、HLS

池鱼 - YiiGaa 2万+

Tensorflow 中的损失函数 —— loss 专题汇总

标准的损失函数并不合适所有场景,有些实际的背景需要采用自己构造的损失函数,Tensorflow 也提供了丰富的基础函数供自行构建。例如下面的例子:当预测值(y_pred)比真实值(y_true)大时,使用 (y_pred-y_true)*loss_more 作为 loss,反之,使用 (y_true-y_pred)*loss_lesstf.greater(x, y):判断 x 是否大于 y,当维度不一致时广播后比较。

WitsMakeMen的专栏 4006

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

tf.keras.losses详解

tf.keras.losses实例是用来计算真实标签( y_true )和预测标签之间( y_pred )的loss损失。 参数:from_logits:是否将 y_pred 解释为 logit 值的张量。 默认情况下,假设 y_pred 包含概率(即 [0, 1] 中的值)。即默认情况下from_logits的值为False 解释一下logit值的含义:逻辑回归一般将因变量二分类变量的0-1转变为频率[0,1],变成odds(优势比,[0,+∞]),然后log一下成为Logit值([-∞,+∞]),简

LeeG_IOT的博客 8693

【机器人学习】abb工业机器人运动学分析与圆弧轨迹规划(三维模型+matlab代码)

下载链接 solidworks模型 D-H建模 圆仿真过程 视频过程:

yjw0911的博客 2533

基于FPGA的相控阵雷达波束控制系统设计(2)

也就是在计算波控码时0,按2.8125递增,取遍-90

qq_43416206的博客 1812

损失函数理解汇总,结合PyTorch1.7和TensorFlow2

作者丨DengBoCong@知乎来源丨https://zhuanlan.zhihu.com/p/271911178编辑丨极市平台本文仅用于学术分享,如有侵权,请联系后台作删文处理。本文打...

zandaoguang的博客 240

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2253

tensorflow分类的loss函数_损失函数理解汇总,结合PyTorch1.7和TensorFlow2

↑ 点击蓝字关注极市平台作者丨DengBoCong@知乎来源丨https://zhuanlan.zhihu.com/p/271911178编辑丨极市平台本文仅用于学术分享,如有侵权,请联系后台作删文处理。极市导读本文总结讨论了在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,对大家各种损失函数有个大致的了解以及使用。...

weixin_39670246的博客 530

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 642

C#里使用NModbus来创建一个TCP从站服务

摘要:本文介绍了一个用C#实现的Modbus TCP从站服务器,基于.NET Framework 4.6.1开发。代码使用NModbus库创建TcpListener和ModbusSlaveNetwork,支持设置IP地址、端口号和从站ID。服务器实现了数据存储初始化功能(包括线圈和保持寄存器),并提供了启动/停止操作的UI界面和日志记录功能。该解决方案适用于需要调试Modbus TCP协议的场景,特别适合无法升级到更高版本.NET Framework的环境。

大坡3D软件开发 480

tensorflow分类的loss函数_损失函数理解汇总,结合 PyTorch1.7 和 TensorFlow2

程序员爱码士点击右侧关注,探讨技术话题!作者丨DengBoCong@知乎来源丨https://zhuanlan.zhihu.com/p/271911178编辑丨极市平台本文仅用于学术分享,如有侵权,请联系后台作删文处理。本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致...

weixin_29692653的博客 596

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

tensorflow分类的loss函数_损失函数理解汇总:结合 PyTorch1.7 和 TensorFlow2!

程序员爱码士点击右侧关注,探讨技术话题!作者丨DengBoCong@知乎来源丨https://zhuanlan.zhihu.com/p/271911178编辑丨极市平台本文仅用于学术分享,如有侵权,请联系后台作删文处理。本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致...

weixin_39519072的博客 315

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

损失函数理解汇总,结合PyTorch和TensorFlow2

本文打算讨论在深度学习中常用的十余种损失函数,结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致的了解以及使用。本文对原理只是浅尝辄止,不进行深挖,感兴趣的伙伴可以针对每个部分深入翻阅资料。

BoCong-Deng的博客 2367

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

tf 损失函数_损失函数理解汇总,结合PyTorch和TensorFlow2

说明:讲解时会对相关文章资料进行思想、结构、优缺点,内容进行提炼和记录,相关引用会标明出处,引用之处如有侵权,烦请告知删除。转载请注明:DengBoCong本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致的了解以及使用。本文对原理只是浅尝辄止,不进行深挖,感兴趣的伙伴可以针对每...

weixin_35677144的博客 886

tensorflow分类的loss函数_【综述专栏】损失函数理解汇总,结合PyTorch和TensorFlow2...

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。作者:DengBoCong地址:https://www.zhihu.com/people/dengbocong本文打算讨论在...

weixin_31002509的博客 813

bool函数_损失函数理解汇总,结合PyTorch和TensorFlow2

说明:讲解时会对相关文章资料进行思想、结构、优缺点,内容进行提炼和记录,相关引用会标明出处,引用之处如有侵权,烦请告知删除。转载请注明:DengBoCong本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致的了解以及使用。本文对原理只是浅尝辄止,不进行深挖,感兴趣的伙伴可以针对每...

weixin_39992665的博客 169

tensorflow分类的loss函数_损失函数理解汇总

本文打算讨论在深度学习中常用的十余种损失函数(含变种),结合PyTorch和TensorFlow2对其概念、公式及用途进行阐述,希望能达到看过的伙伴对各种损失函数有个大致的了解以及使用。本文对原理只是浅尝辄止,不进行深挖,感兴趣的伙伴可以针对每个部分深入翻阅资料。使用版本:TensorFlow2.3PyTorch1.7.001交叉熵损失(CrossEntropyLoss)对于单事件的信...

weixin_29250573的博客 4204

bool函数_【综述专栏】损失函数理解汇总,结合PyTorch和TensorFlow2

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。作者:DengBoCong地址:https://www.zhihu.com/people/dengbocong本文打算讨论在...

weixin_39585795的博客 203

TensorFlow 和 PyTorch 的区别

综上所述,TensorFlow 更适合工业界的大规模应用和部署,而 PyTorch 则在学术界和快速原型开发方面具有优势。

Hype_JOE的博客 2196
上一篇: Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定
下一篇: 30 个Python代码实现的常用功能,精心整理版
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值