softmax函数的搬运工

softmax函数以及Python实现

softmax函数

softmax函数一般用于分类问题的输出层。
分类问题中使用的softmax函数的表现形式如下
在这里插入图片描述

exp(x)是表示ex的指数函数,上面的式子表示假设输出层共有n个神经元,计算第k个神经元的输出y k。分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。
如果用图表示softmax函数的话,如下图。softmax函数的输出通过箭头与所有的输入信号相连。这是因为重softmax函数的式子可以看出,分母是需要所有的输入信号的加和。所以输出层的各个神经元都受到所有输入信号的影响。
在这里插入图片描述

softmax函数的Python实现

# softmax函数的Python实现
# 这个Python的实现完全是依照上面的式子来写的
a = np.array([0.3, 2.9, 4.0])
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
# 其每一步运行的结果可如下图

在这里插入图片描述
如果要经常使用softmax函数的话,可以把他定义成一个函数

def softmax(a):
	exp_a = np.exp(a)
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y

实现softmax函数时的注意事项

在这里插入图片描述
所以softmax函数的实现可以进行如下改进。
在这里插入图片描述
对改进的解释
在这里插入图片描述
在这里插入图片描述
通过上面的例子所示,通过减去输入信号中的最大值,我们发现原来为nan的值(无法计算的值),现在被正确的计算了。综上我们就重新修改了softmax的实现函数

在这里插入代码片
def softmax(a):
	c = np.max(a)
	exp_a = np.exp(a - c)  # 解决exp计算溢出问题
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y

由于softmax函数最终输出的每一个类别的大小就对应上一层输入的大小,所以一般在进行分类的时候就不用softmax,但是在进行学习建立模型的时候还是需要softmax函数这一层的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值