• Softmax


    import torch
    
    import torch.nn.functional as F
    
    x1= torch.Tensor( [ [1,2,3,4],[1,3,4,5],[3,4,5,6]])
    
    y11= F.softmax(x, dim = 0) #对每一列进行softmax
    
    y12 = F.softmax(x,dim =1) #对每一行进行softmax
    
    x2 = torch.Tensor([1,2,3,4])
    
    y2 = F.softmax(x2,dim=0)

     tf.nn.softmax中dim默认为-1,即,tf.nn.softmax会以最后一个维度作为一维向量计算softmax

    softmax是什么?

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

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

    2、log_softmax

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

    虽然在数学上等价于log(softmax(x)),但做这两个单独操作速度较慢,数值上也不稳定。这个函数使用另一种公式来正确计算输出和梯度。

    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)

    3、nn.CrossEntropyLoss() 与 NLLLoss()

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

    4、log似然代价函数

     

  • 相关阅读:
    Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block 解决办法
    unknown host www.baidu.com 解决方法
    [Errno 256] No more mirrors to try 解决方法
    超级优化锁定系统重要文件防止篡改
    隐藏linux软件及内核版本
    linux内核参数注释与优化
    Linux内核参数基础优化
    ulimit linux文件配置
    history历史记录控制
    TMOUT优化终端超时
  • 原文地址:https://www.cnblogs.com/ziytong/p/10670418.html
Copyright © 2020-2023  润新知