zoukankan      html  css  js  c++  java
  • 交叉熵 pytorch中的nn.CrossEntropyLoss()函数

    参考链接:
    https://www.cnblogs.com/JeasonIsCoding/p/10171201.html
    https://blog.csdn.net/qq_27095227/article/details/103775032
    二分类的交叉熵公式是:

    如果是多分类,交叉熵公式如下:

    这里为了更加直观的理解计算过程,举例说明:
    比如我们举例:
    假设我们有个一样本,他经过我们的神经网络后会输出一个5维的向量,分别代表这个样本分别属于这5种标签的数值,(注意此时我们的5个数求和还并不等于1,需要先经过softmax处理).比如,我们的对应的5类的输出以及正确的标签类别:

     inputs = torch.FloatTensor([[-0.3830,-0.0102,-1.4235,-0.5212,0.9011]])
     target = torch.LongTensor([4])
    

    在计算之前,我们首先需要计算y冒号,

    这是经过softmax的各个类别的得分,加起来和为1. softma公式如下:

    y冒有了还缺

    这个是真实标签,会根据类别整成one-hot形式,现在类别是4,那么就是[0,0,0,0,1]. 所以,这两个都有了,带入上面公式:

        import torch
        import torch.nn as nn
        import math
    
        inputs = torch.FloatTensor([[-0.3830,-0.0102,-1.4235,-0.5212,0.9011]])
        target = torch.LongTensor([4])
        ce = nn.CrossEntropyLoss()
        loss = ce(inputs, target)
        print(loss)
    
        sum_ = 0
        for i in range(5):
            sum_ += math.exp(inputs[0][i])
        my_resutlt = -0.9011 + math.log(sum_)
        print("my_=",my_resutlt)
    

    打印如下:
    tensor(0.7020)
    my_= 0.7020485611606857
    可以看到结果一致!

  • 相关阅读:
    区分JS的空值
    死锁
    高效的SQLSERVER分页方案
    IIS经典模式VS集成模式
    MVC过滤器
    Request接收参数乱码原理解析
    int三种转化区别
    Area使用
    Action和Partial等区别
    Log4Net
  • 原文地址:https://www.cnblogs.com/yanghailin/p/13497696.html
Copyright © 2011-2022 走看看