【Python】使用numpy进行神经网络激活函数算法描述

news2024/11/20 6:28:28

【Python】使用numpy进行神经网络激活函数算法描述

系统:macOS 10.14.5 IDE:PyCharm 2018.2.4

一、What

1.1 NumPy

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。 NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  1. 一个强大的N维数组对象 ndarray
  2. 广播功能函数
  3. 整合 C/C++/Fortran 代码的工具
  4. 线性代数、傅里叶变换、随机数生成等功能

1.2 激活函数

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

二、Why 

最近接触了一些AI的知识点,感觉Python在这方面还是很有优势的,特别是库的应用,很多精彩的算法公式都可以通过Python简洁的表达出来,主要是numpy,提供了大量数学工具,在激活函数中描述相关的表达式非常方便。

三、How

3.1 准备工作

3.1.1 安装numpy和matplotlib

1、打开偏好设置

2、选择工程文件,选择Project Interpreter,点击+号

3、搜索numpy,点击Install Package

4、稍等片刻,IDE底部会有状态条提示,安装成功后出现如下提示

5、用同样的方式安装matplotlib 

6、然后回到代码中检查是否能import 

import numpy as npimport matplotlib.pyplot as plt

没有标红即正常,as表示给这个库命名,把上面的两个库命名为np和plt是目前通用做法,matplotlib.pyplot主要是用来画图,后面我们会用它来绘制函数的曲线。

3.2 基础数组与画图操作

3.2.1 生成数组

首先我们用numpy生成一个数组,使用arange函数直接生成一维数组,传入一个整数说明数组的长度 

import numpy as np
import matplotlib.pyplot as plt

a1 = np.arange(9)
print(a1)

3.2.2 绘制曲线

我们把这个数组画出来,使用matplotlib.pyplot的plot函数和show函数实现  plot函数用于绘制曲线,当只传入一组数组时,x轴默认为0,1,2……,y轴为传入的值。

import numpy as np
import matplotlib.pyplot as plt

a1 = np.arange(9)
print(a1)

plt.plot(a1)
plt.show()

这样不够直观,我们在plot中增加一个参数 

plt.plot(a1,’k-o’)中的k-o是设置所绘制图形的颜色、线条类型、图形类型,其中k表示黑色,-表示实线,o表示圆点, 这样子9个点都显示出来了。其他线条类型请参考 https://blog.csdn.net/qiurisiyu2016/article/details/80187177

3.3 Sigmoid公式

上面的公式的作用是将任意实数转换为0~1之间的数,方便后续处理,让我们看看它是如何实现的。

3.3.1 fz=-z

我们来一步一步解析,为了使数组更有代表性,我们给arange()函数传入两个参数 ,代表取数的范围从[-5,6),然后在plot()函数中加一个参数,让横坐标使用我们指定的数组:

可以看到,绘制的曲线为一条斜率为-1的直线。

3.3.2 fz=np.exp(-z)

np.exp(z)是以e为底,以输入参数z为指数的指数函数,数学表达式为fz=e^z

可以看到,绘制的曲线为一条递减的曲线,区间为(0,+∞),其中可以看到经典值e^0=1,e^1=2.718……(自然常数),由于小数点后位数较多,自动转换成了科学计数法,e表示10^,第一个数1.4841e+02即1.4841*10^2≈148,可以看到图中的 第一个点就在150附近。

3.3.3 fz=1+np.exp(-z)

这一步非常重要,如果不进行这一步操作,后续在取倒数时,会发现值的区间超出1,比如当np.exp(-z)=0.1时,1/np.exp(-z)=10,这样整个函数的区间还是(0,+∞),对数据范围限制作用就没有了。

3.3.4 fz=1/(1+np.exp(-z))

这个就是神经网络中的激活函数Sigmoid公式的具体实现,我们看一下它的曲线

这个可以说是非常经典的曲线了,可以看到它是区间(0,1)的递增曲线,并且增长趋势是先加速后减速,类似在动画制作中的小车运动曲线。

但是在实际使用过程中,它依然会存在一些问题,比如在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失、收敛缓慢、幂运算求解耗时等等,具体缺点说明可以参考

https://blog.csdn.net/tyhj_sf/article/details/79932893

中的详细介绍。

3.4 tanh函数

这个函数的取值区间为(-1,1) ,它的输出是0均值(原点左边+原点右边=0) ,一定程度上可以解决收敛缓慢的问题。

tanh(z)=(np.exp(z)-np.exp(-z))/(np.exp(z)+np.exp(-z))

我们还是来慢慢解析它。

3.4.1 fz=np.exp(z)-np.exp(-z)

这个结构看起来复杂,我们拆成两部分

np.exp(z)

即e^z次方,看看指数爆炸一般的增长

然后是np.exp(-z),这个图像我们之前有显示过了,就是曲线图形跟上面对称,递减的函数

那么两个函数相减的图像是什么呢?

可以看到,这个图像跟sigmoid图像的曲线趋势可以说完全相反,它先加速上升,然后中间缓慢,后面又加速上升,有点像我们学习新东西的过程,一开始大量吸收知识点快速上升,到了瓶颈期进展缓慢,过了以后又快速发展。

3.4.2 fz=np.exp(z)+np.exp(-z)

两个函数相加,可以猜到的是,他们会形成一个抛物线(开口朝下)

3.4.3 fz=(np.exp(z)-np.exp(-z))/(np.exp(z)+np.exp(-z))

tanh函数之前介绍过,它是一个区间(-1,1)的函数,由一个递增函数与一个抛物线函数之商所得,它的特点如前所述,取值区间为(-1,1) ,输出是0均值(原点左边+原点右边=0)。

3.5 Relu函数

目前比较流行的一种函数,ReLU虽然简单,但却是近几年的重要成果,有以下几大优点: 1) 解决了gradient vanishing问题 (在正区间) 2)计算速度非常快,只需要判断输入是否大于0 3)收敛速度远快于sigmoid和tanh

公式如下:

Relu=max(0,x)

它是分区间的函数,当z取值大于0时,取z值本身,小于等于0时,取0,函数实现及图像如下:

import numpy as np
import matplotlib.pyplot as plt


z = np.arange(-5, 6)

print(z)
fz = np.arange(11)
for i in range(11):
    if z[i] > 0:
        fz[i] = z[i]
    else:
        fz[i] = 0

print(fz)

plt.plot(z, fz, 'k-o')

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

找不到msvcr100.dll怎么办,多种解决方法快速修复msvcr100.dll问题

当计算机系统中关键文件msvcr100.dll丢失时,可能会引发一系列运行问题和故障现象。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分,对于许多基于Windows的应用程序正常运行至关重要。由于msvcr100.dll是许多应用程序运行所必需的动态…

BUUCTF:[MRCTF2020]ezmisc

题目地址:https://buuoj.cn/challenges#[MRCTF2020]ezmisc 下载附件打开是一张照片: 放到kali中发现crc校验错误,修改照片宽高: 保存即可发现flag flag为: flag{1ts_vEryyyyyy_ez!}

学习Python类型和对象,看这篇文章足矣!

类型与对象 一点基础理论: 对象代表现实世界中像轿车、狗、自行车这些事物。对象具有数据和行为两个主要特征。 在面向对象编程中,我们把数据当作属性,把行为当作方法。即: 数据 → 属性 和 行为 → 方法 类型是创造单个对象实例的蓝本。…

CSS元素分类,知乎上已获万赞

什么是css块元素? 块级元素是独占一行显示的。它的兄弟元素必定不会与其在同一行中(除非脱离了文档流)。通俗点来说,就是块元素(block element)一般是其他元素的容器元素,能容纳其他块元素或内联元素。 css块元素的三…

基于SSM的学科竞赛管理系统。Javaee项目。ssm项目。

演示视频: 基于SSM的学科竞赛管理系统。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvcMybatisVueLayuiElemen…

Java 反射详解:动态创建实例、调用方法和访问字段

“一般情况下,我们在使用某个类之前已经确定它到底是个什么类了,拿到手就直接可以使用 new 关键字来调用构造方法进行初始化,之后使用这个类的对象来进行操作。” Writer writer new Writer(); writer.setName("少年");像上面这个…

2024年软考-官方最新考试安排出来了,软考新调整,很重要,但也很惹人气愤

官方最新通知,关于2024年度计算机技术与软件专业技术资格(水平)考试工作计划 笔试改机考后,必然会迎来调整,但有点让人费解。 这次调整变动主要是每年考试的次数调整,很多改为了一年一考,具体…

Centos8 yum方式安装Redis

Centos8 yum方式安装多个Redis 是否安装GCC依赖 ggc -v #或者 rpm -q gcc安装GCC yum install -y gcc如果不是管理员 加 sudo sudo yum install -y gcc yum安装Redis yum install redis失败更新yum 再安装 #添加EPEL仓库 sudo yum install epel-release#更新yum源 sudo yum upd…

Newsmy储能电源与您相约九州汽车生态博览

2024年3月7日—10日,第24届 深圳国际智慧出行、汽车改装及汽车服务业态博览会(以下简称“九州汽车生态博览会”)将在深圳国际会展中心(宝安)举办,Newsmy纽曼集团将在3号馆32523展位,携全系产品与…

拼多多3.9元的手机支架,在视频号卖15.9元

关注卢松松,会经常给你分享一些我的经验和观点。 万万没想到:拼多多3.9元的手机支架,在视频号竟然要卖15.9元。 更让人想不到的是:视频号商家竟然是从拼多多发货的,足足赚了4倍差价。 更更更让人想不到的是&#xff1a…

2024年第一届CS2major,新胶囊即将发行,需要提前做哪些布局

2024年第一届CS2major,将会在3月17日哥本哈根开始。 所以: 1、新的胶囊大概率会在3月10日左右发布。 2、网传战队挂坠,不知道是否会出现?(原本出现过战队布章包,由于销量太差,第二届就取消了…

《花书》学习:LeNet

# LeNet网络架构 正常的应该是:输入→操作→输出 但都简化 要么省略 操作 要么省略 输出 # LeNet第一个卷积层详解

实现session共享的方法总结完整版

文章目录 实现session共享的方法总结完整版1、使用共享数据库:2、使用粘性会话(Sticky Session):3、使用缓存系统:4、使用分布式文件系统:5、使用中央认证服务:6、使用会话复制:7、使…

【软件测试】一个扫码支付的二维码怎么测(测试点分析)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试的时候&#…

linux小记(1)

基本概念:不依靠扩展名来区分文件类型 好处:除了文本文件其他所有windows文件都无法在Linux下运行,包括病毒木马。 坏处:所有的软件都需要对linux单独开发 习惯用后缀来区分文件,方便管理。 -压缩包:*.…

nginx生成自签名SSL证书

备注:nginx自生成的ssl证书在浏览器访问时会提示此证书不受信用 1.安装nginx nginx必须有"--with-http_ssl_module"模块 查看nginx安装的模块: [rootmaster1 key]# nginx -V nginx version: nginx/1.24.0 built by gcc 4.8.5 20150623 (Red …

我的第②个出海工具站 - 2024年50个出海工具站计划

为了大家更好的使用各种出海工具。我上线了一版 出海工具导航 站点,经常使用的可以收藏下,我文内使用的网站都集成在了这里,非常使用。 随着AIGC的到来,2024年到了海外工具回暖的一年。今年计划上线50款出海工具站计划&#xff0c…

[SS]语义分割_U-Net

U-Net网络结构讲解视频 从零开始的U-net入门 U-Net详解 研习U-Net改进 目录 一、介绍 二、详解 1、网络结构 2、网络运行过程 3、实验现状 4、分割策略 一、介绍 U-Net是一种用于生物医学图像分割的卷积神经网络架构。它由Olaf Ronneberger等人在2015年提出&#x…

YOLOv8改进 在更换的PoolFormer主干网络中增加注意力机制

一、PoolFormer的网络结构 PoolFormer采用自注意力机制和池化操作相结合的方式,同时考虑了局部和全局的特征关系。 具体的代码如(YOLOv8改进 更换多层池化操作主干网络PoolFormer_yolov8池化-CSDN博客)所示。 二、Global Attention Mechan…

Redis面试总结

概述 1. Redis是什么?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存。 因为是纯内存操作&…