网络编程
位置:首页>> 网络编程>> Python编程>> Softmax函数原理及Python实现过程解析

Softmax函数原理及Python实现过程解析

作者:April15  发布时间:2022-12-15 02:18:24 

标签:Python,Softmax,函数

Softmax原理

Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。

对于一个k维向量z,我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果,具体计算公式为:

Softmax函数原理及Python实现过程解析

对于k维向量z来说,其中zi∈R,我们使用指数函数变换可以将元素的取值范围变换到(0,+∞),之后我们再所有元素求和将结果缩放到[0,1],形成概率分布。

常见的其他归一化方法,如max-min、z-score方法并不能保证各个元素为正,且和为1。

Softmax性质

输入向量x加上一个常数c后求softmax结算结果不变,即:

Softmax函数原理及Python实现过程解析

我们使用softmax(x)的第i个元素的计算来进行证明:

Softmax函数原理及Python实现过程解析

函数实现

由于指数函数的放大作用过于明显,如果直接使用softmax计算公式

Softmax函数原理及Python实现过程解析

进行函数实现,容易导致数据溢出(上溢)。所以我们在函数实现时利用其性质:先对输入数据进行处理,之后再利用计算公式计算。具体使得实现步骤为:

  • 查找每个向量x的最大值c;

  • 每个向量减去其最大值c, 得到向量y = x-c;

  • 利用公式进行计算,softmax(x) = softmax(x-c) = softmax(y)

代码如下:


import numpy as np

def softmax(x):
 """
 softmax函数实现
 参数:
 x --- 一个二维矩阵, m * n,其中m表示向量个数,n表示向量维度
 返回:
 softmax计算结果
 """
 assert(len(X.shape) == 2)
 row_max = np.max(X, axis=axis).reshape(-1, 1)
 X -= row_max
 X_exp = np.exp(X)
 s = X_exp / np.sum(X_exp, axis=axis, keepdims=True)

return s

测试一下:

a = [[1,2,3],[-1,-2,-3]]
b = [[1,2,3]]
c = [1,2,3]
a = np.array(a)
b = np.array(b)
c = np.array(c)

print(softmax(a))
print(softmax(b))
print(softmax(c)) # error

输出结果为:

[[ 0.09003057 0.24472847 0.66524096]
[ 0.66524096 0.24472847 0.09003057]]
[[ 0.09003057 0.24472847 0.66524096]]
Traceback (most recent call last):
assert(len(X.shape) == 2)
AssertionError

来源:https://www.cnblogs.com/ysugyl/p/12922598.html

0
投稿

猜你喜欢

  • css当中有许多平时很少用的属性,但是这些属性有时候被发掘出来以后就会立刻引起一些人的追逐,首字大写就是这样一种效果。最近越来越多的blog
  • 如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。发现用户'some_user'
  • 新年新气象,今天就用代码来制作一个 动态鞭炮 ,效果如下所示。动态鞭炮的基本原理是:将一个录制好的鞭炮视频以字符画的形式复现,基本步骤是帧采
  • 阅读之前:在看文章具体内容之前,希望你可以 先打开IE8,打开http://www.taobao.com,然后在地址栏里输入:javascr
  • 本文实例讲述了php查询whois信息的方法。分享给大家供大家参考。具体如下:这里使用php通过查询whois信息的网站列表进行查询func
  • 不知道有多少人清楚的知道,在Oracle中,如果一个复合索引,假定索引(a,b,c)三个字段,删除了(包括unused)其中一个字段,Ora
  • 最近做了一个微信小程序的项目,关于后端给我传递日期的时候,我拿到的是一串数字如:createDate: 1552117531000 ,这是一
  •  在WEB2.0 网页充斥的年代,身边无时无刻都听到这样的声音:“拒绝海报式设计,要做有用的设计,要简洁,要清爽,要大气”产品经理
  • 初步介绍 当然,我知道现在有成千上万个关于 用CSS处理圆角 的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常
  • 作者:Henny Swan / co-lead of WaSP ILG译者:JunChen / member of WaSP ILG原文:h
  • 用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplac
  •     表单外观的美化很多时候,我们仅仅为了实现数据采集这个功能来使用表单,常看到的表单都是“千人一面”、毫无
  • iou33449999 文:一个链接 一个层 一个onMouseOver 一个onMouseOut然后这个层就会在onMouseOver这个
  • 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制、判断字符长度 、js限制输入、
  • 前言原子操作这是Java多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有
  • 如果不清楚字符串的编码格式的话,就可以将这段字符这样检查:$encode = mb_detect_encoding($string, arr
  • 经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数。答案当然是有的。PHP中
  • 在ASP中,也能让XML发挥其优点。例如像.NET那样写一个XML配置文件,在程序中读取,或者将一些数据量不大又经常访问的数据写入到XML中
  • 删除链表中重复的结点: 定义两个指针pre和current两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没
  • 一、问题描述 SQL Plus WorkSheet是一个窗口图形界面的SQL语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相
手机版 网络编程 asp之家 www.aspxhome.com