资源经验分享Softmax

Softmax

2019-12-16 | |  98 |   0

原标题:Softmax

原文来自:博客园      原文链接:https://www.cnblogs.com/ziytong/p/10670418.html



import torchimport 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) #对每一列进行softmaxy12 = F.softmax(x,dim =1) #对每一行进行softmaxx2 = 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) 的组成是
 01.png

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

2、log_softmax

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

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

 


import torchimport torch.autograd as autogradimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimimport 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似然代价函数

 03.png

04.png

 

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:在Linux系统中安装caffe

下一篇:深度学习中Dropout原理解析

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...