• 【TensorFlow&PyTorch】loss损失计算


    简单来说,深度学习就是通过计算梯度、反向传播来不断改善网络内的参数,以此使得网络模型更加贴合目标数据。而梯度和loss值是分不开的,选择好合适的loss计算方法也是有助于训练好优秀的网络模型的。

    常用的loss计算方法有两种,一个是均方差,另一个是交叉熵。均方差差不多是万金油,什么都可以套一套,通常与sigmoid激活函数搭配使用。交叉熵则更加适合分类问题,简单来说,交叉熵越低,事物发生的确定性越大。

    下面简单介绍一下TensorFlow和PyTorch的损失计算的API。

    均方差:

    均方差=∑(y-out)**2

    其中out为计算值,也就是模型的计算结果。y为真实值,也就是数据集中的正确的结果。

    TensorFlow:

    1. loss=tensorflow.keras.losses.MSE(计算值,真实值)
    2. loss=tensorflow.reduce_mean(loss)

    PyTorch:

    1. loss=torch.nn.functional.mse_loss(计算值,真实值)
    2. #PyTorch中默认会把loss值都加起来,所以比 TensorFlow少一行代码

     交叉熵:

    交叉熵 H(p,q)=-∑p(x)·㏒₂q(x)

     p和q分别为两个事件,p(x)和q(x)为两个事件发生的概率。

    下面输入的计算值和真实值都需要进行one-hot处理.

    TensorFlow中one-hot接口:one-hot=tensorflow.one_hot(输入值,depth=一共分了几类)

    PyTorch中会自动进行one-hot处理

    TensorFlow:

    1. 真实值=tensorflow.one-hot(真实值,depth=2/n)
    2. #二分类时:
    3. 计算值=tensorflow.one-hot(计算值,depth=2)
    4. loss=tensorflow.losses.binary_crossentropy(计算值,真实值)
    5. #多分类时:
    6. 计算值=tensorflow.one-hot(计算值,depth=n)
    7. loss=tensorflow.losses.categorical_crossentropy(计算值,真实值)

    PyTorch:

    loss=torch.nn.functional.cross_entropy(计算值,真实值)

    处理loss:

     总的流程是loss->梯度->优化器。

    计算出loss后进行梯度求导,如何传入优化器,由优化器来调整网络的参数。

    TensorFlow:

    1. #例:
    2. with tensorflow.Gradient Tape() as tape:
    3. out=model(x)
    4. loss=tensorflow.keras.losses.MSE(y,out)
    5. grad=tape.gradient(loss,model.trainable_variables)
    6. optimizer.apply_gradients(zip(grad,model.trainable_variables))

    PyTorch:

    1. #例:
    2. out=model(x)
    3. loss=torch.nn.function.mse_loss(out,y)
    4. #貌似不需要这行??? grads=torch.autograd.grad(loss,model.paremeters())
    5. optimizer.zero_grad()
    6. loss.backward()
    7. optimizer.step()

    其中,model是网络模型,optimizer是优化器。

  • 相关阅读:
    Less语法简介
    互联网产品说明书指南,附撰写流程与方法
    【python】基于随机森林和决策树的鸢尾花分类
    不开源项目aspose.cells最新版23.10的一些科普
    DP0001A高压差分探头具有哪些具体性能?
    分布式系统中如何实现临界资源的互斥访问?
    c语言 const
    Redis未授权访问漏洞
    倍福XTS | 磁驱柔性输送系统环形线Ethercat DSP+FPGA控制器
    springboot多模块项目启动经历
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/126128680