Python实现阶跃函数、sigmoid函数、ReLU函数

  • 神经网络
  • 阶跃函数实现
  • sigmoid函数的实现
  • ReLU函数的实现

神经网络

神经网络有三层,左边的为输入层,中间的是中间层,右边的为输出层。其中中间层也叫隐藏层,第0层为输入层,第1层为中间层,第2层为输出层。

感知机接收x1和x2两个输入信号输出y,其数学公式为:
y={0b + w1x1 + w2x2 <=01b + w1x1 + w2x2 >0y= \begin{cases} 0& \text{b + w1x1 + w2x2 <=0}\\ 1& \text{b + w1x1 + w2x2 >0} \end{cases}y={01​b + w1x1 + w2x2 <=0b + w1x1 + w2x2 >0​
其中b为偏置,是控制神经元被激活的容易程度,w1与w2为每一个信号的权重,用于控制信号的重要性。

上面的式子还可以简化为一个函数来表示:
y = h(b + w1x1+ w2x2)
h(x)={0x <=01x >0h(x)= \begin{cases} 0& \text{x <=0}\\ 1& \text{x >0} \end{cases}h(x)={01​x <=0x >0​
函数h(x)在输入超过0时就会输出1,在输入不超过0的时候就会输出0。

阶跃函数实现

阶跃函数:以某个阈值为界,一旦超出了阈值,就会切换输出。感知机中使用阶跃函数作为激活函数,进入神经网络就是把激活函数从阶跃函数换成其他的函数。当输入超过0时输出1,不超过0时输出0。

函数中的参数x只能接受实数,并不接受数组,为了方便我们使用numpy数组来实现。对NumPy数组进行不等号运算之后会生成一个布尔型的数组,其中的元素大于0则为True,小于等于0则为False。如数组x=np.array[-1.0, -0.5, 1.2, 2],经过y=x>0,输出的y数组将会是[False, False, True, True]。但是我们在输出函数图形的时候需要的是int类型的函数,所以我们需要把布尔类型的数组转换为int类型的数组,使用y.astype(np.int)完成。

# 阶跃函数
import numpy as np
import matplotlib.pylab as plt  # 绘制图形
# 设置字体,使可以输入中文
plt.rcParams['font.sans-serif']=['STSong']
def stepfun(x):  # 定义函数return np.array(x > 0)  # 此时返回的是bool类型的数组
x = np.arange(-10.0, 10.0, 0.1)  # x轴取-10.0到10.0,单位间隔为0.1
y = stepfun(x)  # 函数调用
print(y)  # 打印输出bool类型的数组
y1 = y.astype(np.int)  # 将数组y的元素从布尔型转化为int型
print(y1)  # 打印输出int类型的数组
plt.plot(x, y1)
plt.ylim(-0.5, 1.5)  # y轴的取值范围
plt.xlabel('x')  # x轴
plt.ylabel('y')  # y轴
plt.title('阶跃函数图形')  # 标题
plt.show()  # 显示

画出阶跃函数的图形如下:

sigmoid函数的实现

sigmoid函数的实现,只要把输出的数组函数转换为sigmoid函数就可以实现。其中用到激活函数sigmoid函数式:
h(x)=11+exp(−x)h(x) = \frac{1}{1+exp(-x)} h(x)=1+exp(−x)1​
我们在画图形的时候把阶跃函数与sigmoid函数画一起。

步骤:
(1)首先需要定义一个接收参数x的stepfun函数与sigmoid函数,其中stepfun函数中返回的是布尔类型的数组,sigmoid函数中返回的是浮点类型的数组
(2)然后对参数x进行赋值,这里取-10到10,其中单位间隔设置为0.1;进行两个函数的调用
(3)因为stepfun函数中输出的是布尔类型的数组,所以需要将布尔类型的数组转换为int类型的数组
(4)最后输出结果,画出图形

# 阶跃函数与sigmoid函数实现
import numpy as np
import matplotlib.pylab as plt  # 绘制图形
# 设置字体,使可以输入中文
plt.rcParams['font.sans-serif']=['STSong']# 定义函数(阶跃函数)
def stepfun(x):return np.array(x > 0)  # 此时返回的是bool类型的数组# 定义函数(sigmoid函数)
def sigmoid(x):# sigmoid函数式,返回的是数组return 1/(1+np.exp(-x))x = np.arange(-10.0, 10.0, 0.1)  # x轴取-10.0到10.0,单位间隔为0.1
y = stepfun(x)  # 函数调用阶跃函数
print(y)  # 打印输出bool类型的数组
y1 = y.astype(np.int)  # 将数组y的元素从布尔型转化为int型
print(y1)  # 打印输出int类型的数组
f = sigmoid(x)  # 函数调用sigmoid函数
print(f)  # 打印输出数组
# 绘制图形
plt.plot(x, y1, color = 'b', label='阶跃函数')  # label为标签
plt.plot(x, f, color = 'red', linestyle = '--', label='sigmoid函数')  # label为标签
plt.ylim(-0.5, 1.5)  # y轴的取值范围
plt.xlabel('x')  # x轴
plt.ylabel('y')  # y轴
plt.title('阶跃函数与sigmoid函数图形')  # 标题
plt.legend()  # 加上图例
plt.show()  # 显示

画出两个函数的图形如下:

ReLU函数的实现

ReLU函数在输入大于0的时候,直接输出这个值,在输入小于等于0的时候,输出的为0。ReLU的函数式为:
h(x)={xx>00x<=0h(x)= \begin{cases} x& \text{x>0}\\ 0& \text{x<=0} \end{cases}h(x)={x0​x>0x<=0​
其中使用NumPy函数中的maximum函数,maximum函数会从输入的数值中选出较大的值输出。

# ReLU函数实现
import numpy as np
import matplotlib.pylab as plt  # 绘制图形
# 设置字体,使可以输入中文
plt.rcParams['font.sans-serif']=['STSong']
def relufun(x):  # 定义函数return np.maximum(0, x)  # 返回数组(比0大则输出x,小于等于0输出0)
x = np.arange(-10.0, 10.0, 0.1)  # x轴取-10.0到10.0,单位间隔为0.1
y = relufun(x)  # 函数调用
print(y)  # 打印输出数组
# 绘制图形
plt.plot(x, y)
plt.ylim(-1, 12)  # y轴的取值范围
plt.xlabel('x')  # x轴
plt.ylabel('y')  # y轴
plt.title('ReLU函数图形')  # 标题
plt.show()  # 显示

输出的图形如下:

Python实现阶跃函数、sigmoid函数、ReLU函数相关推荐

  1. 神经网络常用的三大激活函数sigmoid函数、tanh函数、relu函数对比讲解

    在我们学习神经网络的时候经常要用到激活函数,但是我们对于为什么要使用这一个,它们之间的区别和优缺点各是什么不太了解.下面,我们来详细说一说这三个激活函数. - sigmoid函数 sigmoid函数也 ...

  2. sigmoid函数,tanh函数,relu函数,softmax函数

    sigmoid函数 数学表达式: f(z)=1/(1+e**-z) Sigmoid 函数的输出范围是 0 到 1.由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化: 用于将预测概率作 ...

  3. 非程序员的编程之旅——Python基础篇(5)函数

    作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师. 上一篇中讲述了关于流程控制和异常处理,特别是循环,某种程度上来说实际是对整个程序的简化(循环语句我可以挨个写啊,每个循环执行的代码我用单流程, ...

  4. 关于卷积神经网络的案例以及ReLU函数

    案例1--简单黑白边界检测 下面是使用Conv2D算子完成一个图像边界检测的任务.图像左边为光亮部分,右边为黑暗部分,需要检测出光亮跟黑暗的分界处. 设置宽度方向的卷积核为[1,0,−1][1, 0, ...

  5. 激活函数之ReLU函数

    0 前言 激活函数的引入是为了增加神经网络模型的非线性,没有激活函数每层就相当于矩阵相乘.每一层输出都是上层的输入的线性函数,无论神经网络多少层,输出都是输入的线性组合,就是最原始的感知机 加入激活函 ...

  6. 3 神经网络基础(阶跃、sigmoid、relu激活函数的代码实现)

    目录 1. 输入权重计算 2.与门的实现 3.非门的实现 4.或门的实现 5.感知机可以实现与.或.非门的逻辑 6.阶跃函数的实现 7.sigmoid 函数的实现 8.阶跃函数和sigmoid函数相比 ...

  7. 常用的激活函数sigmoid,relu,tanh

    1.什么是激活函数? 在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两部: (1)输入该节点的值为x1,x2时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值z ...

  8. Python画Sigmoid、Relu、Softmax、Tanh、Leaky relu等函数(1)

    看鱼书有感,记录一下: 批处理的好处及小批量概念(2) Python(Numpy)实现均方差.交叉熵损失函数等(3) 纯Python实现:函数求导切线图.求偏导.梯度下降法(4) 纯Python实现反 ...

  9. 机器学习入门(03)— 激活函数分类(阶跃函数和 sigmoid 函数的理论、实现、显示以及区别、非线性函数、ReLU 函数、tanh 函数)

    各种激活函数介绍,请参考下面链接: https://en.wikipedia.org/wiki/Activation_function 1. 阶跃函数 1.1 理论 式(3.3)表示的激活函数以阈值为 ...

  10. python不支持prelu_python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数

    python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数 # -*- coding:utf-8 -*- from matplotlib import pyplot as ...

最新文章

  1. [转]图解APP的商业模式
  2. python【蓝桥杯vip练习题库】ADV-279矩阵乘法
  3. Codeblocks更改编译器为VC++6.0
  4. MySQL分组函数和distinct搭配使用
  5. 图推荐算法在EE问题上的应用
  6. Jsoup解析HTML实例及文档方法详解
  7. 前端学习(2031)vue之电商管理系统电商系统之创建新分支
  8. NVIDIA将全面支持笔记本混合显卡技术
  9. 日期控件的使用 c# 114867852
  10. SpringBoot集成MongoDB
  11. 他曾一举击败英伟达,却因坚持研发背负骂名
  12. 8个JavaScript题目
  13. Eclipse中Maven的设定
  14. Internet Explorer更改MIME处理方式以提高安全性
  15. liunx安装jdk,实测有效
  16. 计算机组成与系统结构课设实验报告
  17. Win11重启快捷键是什么?
  18. 中国计算机学会(CCF)推荐中文科技期刊目录(2020年发布,官网转载)
  19. fig-tlo_PHP-FIG,Quo Vadis?
  20. 浅谈技术管理之日式管理的殊途同归

热门文章

  1. vcm驱动芯片原理_手机Cam和era模组及VCM与VCMDriver介绍.pptx
  2. 2022年搜索引擎研究报告
  3. springboot启动报错@Bean definition illegally overridden by existing bean definition
  4. kettle简单的更新与插入
  5. 2021年苹果ASO商店优化技巧
  6. web前端开发前景如何?
  7. google关键词查询
  8. Excel自动填充功能
  9. 并行处理提高工作效率
  10. 程序设计 Week15 字符串作业