zoukankan      html  css  js  c++  java
  • PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数

    1、softmax

    函数 Softmax(x) 也是一个 non-linearity, 但它的特殊之处在于它通常是网络中一次操作. 这是因为它接受了一个实数向量并返回一个概率分布.其定义如下. 定义 x 是一个实数的向量(正数或负数都无所谓, 没有限制). 然后, 第i个 Softmax(x) 的组成是
    exp(xi)∑jexp(xj)
    exp⁡(xi)∑jexp⁡(xj)

    输出是一个概率分布: 每个元素都是非负的, 并且所有元素的总和都是1.
    2、log_softmax

    在softmax的结果上再做多一次log运算

    While mathematically equivalent to log(softmax(x)), doing these two
    operations separately is slower, and numerically unstable. This function
    uses an alternative formulation to compute the output and gradient correctly.
    1
    2
    3
    虽然在数学上等价于log(softmax(x)),但做这两个

    单独操作速度较慢,数值上也不稳定。这个函数

    使用另一种公式来正确计算输出和梯度。
    1
    2
    3
    4
    5
    测试:


    import torch
    import torch.autograd as autograd
    import torch.nn as nn
    import torch.nn.functional as F
    import torch.optim as optim
    import numpy as np

    data=autograd.Variable(torch.FloatTensor([1.0,2.0,3.0]))
    log_softmax=F.log_softmax(data,dim=0)
    print(log_softmax)

    softmax=F.softmax(data,dim=0)
    print(softmax)

    np_softmax=softmax.data.numpy()
    log_np_softmax=np.log(np_softmax)
    print(log_np_softmax)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    3、nn.CrossEntropyLoss() 与 NLLLoss()

    NLLLoss 的 输入 是一个对数概率向量和一个目标标签. 它不会为我们计算对数概率. 适合网络的最后一层是log_softmax. 损失函数 nn.CrossEntropyLoss() 与 NLLLoss() 相同, 唯一的不同是它为我们去做 softmax.

    4、log似然代价函数

    C=−∑kyklogak
    C=−∑kyklogak

    其中,akak表示第k个神经元的输出值;ykyk表示第k个神经元对应的真实值,取值为0或1。实际上,做分类时候,只有一个ykyk为1,其他均为0,最终结果是C=−yklogakC=−yklogak(akak对应着正确的那一个分类,log默认是e为底,ak∈[0,1]ak∈[0,1],当akak最大时候,C=0),损失为0.
    ---------------------
    作者:HawardScut
    来源:CSDN
    原文:https://blog.csdn.net/hao5335156/article/details/80607732
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    IDEA实用教程(十一)—— 使用Maven创建JavaSE项目
    IDEA实用教程(十)—— 配置Maven的全局设置
    IDEA实用教程(九)—— 创建Servlet
    IDEA实用教程(八)—— 创建JavaWeb项目
    搭建视频解析的接口
    IDEA实用教程(七)—— IDEA的断点调试
    Elasticsearch 常用配置参数总结
    C# web api返回类型设置为json的两种方法
    asp.net MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
    CountDownLatch的使用和原理解析
  • 原文地址:https://www.cnblogs.com/jfdwd/p/11069029.html
Copyright © 2011-2022 走看看