Softmax()函数的溢出问题笔记

2023-05-16

首先,回顾softmax函数的定义: 

y_{k}^{} = \frac{e^{​{a_{k}^{}}}}{\sum_{i=1}^{n}e^{a_{i}^{}}}(1)

按照这个定义,softmax()在Python解释器中可以这样实现:

import numpy as np
def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    return exp_a/sum_exp_a

这样的实现当然没什么问题,下面考虑这样的一种情况,输入如下:

x = np.array([1010,1000,990])

我们采用Python3.8环境下的IDE对其进行计算,结果如:

Warning (from warnings module):
  File "E:/编程语言练习/python/深度学习入门/IDLE的对话实现/softmax.py", line 3
    exp_a = np.exp(a)
RuntimeWarning: overflow encountered in exp

Warning (from warnings module):
  File "E:/编程语言练习/python/深度学习入门/IDLE的对话实现/softmax.py", line 5
    return exp_a/sum_exp_a
RuntimeWarning: invalid value encountered in true_divide
array([nan, nan, nan])

#nan:not a number.也就是不确定的地方

此时在这样的定义下我们无法给出一个正确的结果,从而需要对softmax()进行修改:

在(1)的上下两端同时乘一个因数C,由

C = e_{}^{lnC} 

 可得

y_{k}^{} = \frac{e_{}^{a_{k}^{}+lnC}}{\sum_{i=1}^{n}e_{}^{a_{i}^{}+lnC}}(2)

lnC = C{}'

 就可以得到

y_{k}^{} = \frac{e_{}^{a_{k}^{}+C{}'}}{\sum_{i=1}^{n}e_{}^{a_{i}^{}+C{}'}}(3)

至此到(3)就完成了对softmax()函数的改进。

让我们再次回到上面出错的代码当中:

>>> c = np.max(a)
>>> a-c
array([  0, -10, -20])
>>> np.exp(a-c)/np.sum(np.exp(a-c))
array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])
>>> 

通过减去输入信号的最大值,我们为防止softmax()溢出提供了一种有效的对策,把最大值C作为任意常数带入(3)中,就可以有效防止softmax()作为激活函数时溢出。(减去输入信号的最大值)。

从而,提出一种新的softmax()函数代码作为纠正:
 

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)#溢出对策
    sum_exp_a = np.sum(exp_a)
    y = exp_a/sum_exp_a
    return y

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Softmax()函数的溢出问题笔记 的相关文章

  • sed命令的使用(合并行)

    1 把所有不以句号结尾的行 xff0c 和下一行合并 span class token function sed span i span class token string 39 N s n 39 span abc txt 2 把两行合并
  • Mybatis常见面试题及答案

    文章目录 1 什么是Mybatis xff1f 2 Mybaits的优缺点 xff1a 3 和 的区别是什么 xff1f 4 通常一个mapper xml文件 xff0c 都会对应一个Dao接口 xff0c 这个Dao接口的工作原理是什么
  • HDFS排查路径

    遇到HDFS的问题 xff0c 首先需要排除可用类问题 可用类问题按影响 紧急程度不同 xff0c 可继续分为HDFS功能性受损 lt 61 HDFS高可靠性 高可用性受损 按照以下步骤进行排查 xff0c 以下任意一项有异常 xff0c
  • Docker复习: jar包打成docker

    FROM openjdk 8 ARG JAR FILE COPY springbootmybatis 1 0 SNAPSHOT jar app jar EXPOSE 9012 ENTRYPOINT 34 sh 34 34 c 34 34 j
  • iscsi磁盘挂载并设置为开机自动挂载

    前提准备 xff1a 安装iscsi客户端软件 yum y install iscsi initiator utils 第一步 xff1a 发现ISCSI设备 root 64 sdw4 iscsiadm m discovery t st p
  • 关于华为AC6507S能ping通web和ssh却登录不上排障记录(管理面隔离)

    一 客户描述PC和服务器能ping通AC但是web却登录不上 测试 xff1a 设置服务器地址为192 168 0 100 24 AC地址192 168 0 2 24 用0 100去ping0 2可以ping通 xff0c web登录连接失
  • tensor 和 numpy 的互相转换

    为什么要相互转换 xff1a 简单一句话 numpy操作多样 简单 但网络前向只能是tensor类型 各有优势 所以需要相互转换补充 convert Tensor x of torch to array y of numpy y 61 x
  • 图像畸变矫正算法实现 matlab版

    真正的相机镜头不理想 xff0c 并在图像中引入一些失真 为了解释这些非理想性 xff0c 有必要在透视投影的方程中添加失真模型 一 原图如下 xff1a 二 实现的效果图 三 算法具体实现 function undistorted img
  • Pytorch学习笔记(六)之完整的模型训练(以Cifar10为例)

    文章目录 前言 xff1a 数据集介绍0 准备工作 xff1a 首先导入相关包 xff0c 设置参数等1 数据预处理之增强 transforms等 2 数据的读取 Dataset amp Dataloader 3 模型的搭建 nn mode
  • 对抗攻击(Adversarial Attack)

    文章目录 对抗攻击对抗防御 对抗攻击 图片可以看成一个很长的向量 xff0c 如果在图片的每个像素上都加上一个很小的pertubation 扰动 杂讯 xff0c 再把它输入到神经网络 xff0c 这个时候分类器可能就会误判 没有被攻击的图
  • 【对抗攻击论文笔记】对抗迁移性:Delving Into Transferable Adversarial Examples And Black-Box Attacks

    文章目录 论文概述ideamethod 详细内容摘要1 介绍2 对抗深度学习和可迁移性2 1 对抗深度学习问题2 2 对抗样本生成的方法2 3 评估方法 3 非定向对抗样本3 1 基于优化3 2 基于FGSM 4 定向对抗样本5 集成的方法
  • CoCo数据集下载

    文章目录 1 介绍2 下载2 1 官网2 2 百度网盘2 3 下载到linux服务器 1 介绍 MS COCO的全称是Microsoft Common Objects in Context xff0c 起源于微软2014年的Microsof
  • 最新win10重装系统官方纯净版——2022家庭版多图详细

    文章目录 前言 xff08 碎碎念 xff09 0 设备规格1 备份2 制作启动盘2 1 准备U盘2 2 下载win10 安装包 3 重装系统3 1 插入系统安装盘 xff08 U盘 xff09 3 2 将固态硬盘分区 4 重装之后4 1
  • Java SE(十一)之异常处理(Exception)

    文章目录 异常概述1 什么是异常 xff1f 2 为什么要异常 xff1f 异常体系及分类1 运行时异常2 编译时异常 异常处理1 JVM默认处理方案2 try catch 3 throw amp throws xff08 1 xff09
  • k8s: pod volume的用法

    k8s版本 xff1a 1 22 apiVersion v1 kind Pod metadata name volume hostpath namespace dev spec containers name nginx image ngi
  • Java SE(十四)之 Java 8新特性(Lambda,Stream流,方法引用等)

    文章目录 Java 8Lambda1 概述2 应用场景3 省略规则 Stream流1 简介2 Stream流的创建3 常用中间方法4 常用终结方法5 收集Stream流 方法引用1 方法引用符 2 引用类方法 Java 8 Java8可以是
  • LeetCode之回溯算法

    文章目录 思想 amp 框架1 组合 子集和排列问题2 组合应用问题 组合 子集问题1 lc77 组合2 lc216 组合总和III3 lc39 组合总和4 lc40 组合总和II5 lc78 子集6 lc90 子集II 排列1 全排列I2
  • spring事务的四种隔离级别

    spring事务的四种隔离级别 1 事务的四大特性 xff08 ACID xff09 2 与事务隔离级别的相关问题3 事务的隔离级别 1 事务的四大特性 xff08 ACID xff09 原子性 要么都成功 xff0c 要么都失败回滚 一致
  • Ribbon与Nginx的区别

    客户端负载均衡Ribbon Ribbon 与 Nginx 的区别 xff1f 总结1 服务器端负载均衡Nginx2 客户端负载均衡Ribbon应用场景的区别 xff1a Ribbon 与 Nginx 的区别 xff1f Ribbon是客户端
  • Failed to process import candidates for configuration class [com.wjm.springcloud.Application]; neste

    Failed to process import candidates for configuration class com wjm springcloud Application nested exception is java io

随机推荐