神经网络|(二)sigmoid神经元函数

【1】引言

在前序学习进程中,我们已经了解了基本的二元分类器和神经元的构成,文章学习链接为:

神经网络|(一)加权平均法,感知机和神经元-CSDN博客

在此基础上,我们认识到神经元本身在做二元分类,是一种非此即彼的选择。

由于不同的数据所占的权重不同,二元分类结果也一定收到权重的影响,为此,必须使用数学表达这种影响力。

在神经网络相关研究的漫长发展进程中,研究范围从单个因素到多个因素,必须关注无数的二元分类结果同时作用后获得的最终分类结果,于是sigmoid()函数被提出。

【2】二元分类结果数学表达

认识感知机的二元分类本质,是研究sigmoid()函数的基础。

这里先创造四个矩阵,这三个矩阵分别代表元素1,元素2,元素1和权重和元素2的权重。

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a = np.random.randint(5,9,size=(1,5)) #矩阵
b = np.random.randint(1,5,size=(1,5)) #矩阵
c = np.random.randn(1,5) #矩阵
d = np.random.randn(1,5) #矩阵
#阈值开关
k=1
#空矩阵
e =np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果

进行二元分类计算:

#二元分类计算
for i in range (5):if a[0,i]*c[0,i]+b[0,i]*d[0,i]-k>0: #阈值计算,满足条件时取1,否则取0e[0,i]=1else:e[0,i]=0print('e[0,',i,']=',e[0,i]) #输出阈值计算结果

绘制二元分类的效果:

#绘制二元分类计算的结果
print('a=',a) #输出矩阵
print('b=',b) #输出矩阵
print('c=',c) #输出矩阵
print('d=',d) #输出矩阵
x=np.arange(0,5,1) #定义一个自变量
plt.plot(x,e[0,x]) #对阈值计算结果绘图
plt.savefig('ganzhiji.png') #保存图像
plt.show() #输出图像

这里使用的阈值判断函数为:

for i in range (5):if a[0,i]*c[0,i]+b[0,i]*d[0,i]-k>0: #阈值计算,满足条件时取1,否则取0e[0,i]=1else:e[0,i]=0

代码运行后的输出图像为:

图1

图1真实地反映了非此即彼的二元分类效果。

需要注意的是,由于元素的权重使用随机数生成,所以每次运行上述程序,获得的效果可能不一样。

【3】sigmoid函数

实际上,二元分类效果可能不是两个元素算一次就进行判断,而是多个结果互相叠加在一起,也就是把阈值判断函数改为:

f=0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 阈值计算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 阈值计算
if e[0,4]>0: #最后计算结果,超过阈值开关取1,否则取0f=1
else:f=0

代码运行后,获得的输出图像为:

图2

此时获得的数据分别为:

图3

由图3可见,因为最后的e[0,4]>0,所以f=1。

此时的完整代码为:

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a = np.random.randint(5,9,size=(1,5)) #矩阵
b = np.random.randint(1,5,size=(1,5)) #矩阵
c = np.random.randn(1,5) #矩阵
d = np.random.randn(1,5) #矩阵
#阈值开关
k=1
#空矩阵
e =np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果
f=0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 阈值计算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 阈值计算
if e[0,4]>0: #最后计算结果,超过阈值开关取1,否则取0f=1
else:f=0#绘制二元分类计算的结果
print('a=',a) #输出矩阵
print('b=',b) #输出矩阵
print('c=',c) #输出矩阵
print('d=',d) #输出矩阵
print('e=',e) #输出矩阵
print('f=',f) #输出矩阵
x=np.arange(0,5,1) #定义一个自变量
plt.plot(x,e[0,x]) #对阈值计算结果绘图
plt.savefig('ganzhiji.png') #保存图像
plt.show() #输出图像

sigmoid()函数就是在上述基础上,进一步优化函数表达式,把所有的加权计算结果变成指数函数的变量,并且指数函数还设置成分式的一部分。相应的,有如下函数:

f(x)=\frac{1}{1+exp(-\sum {w}_j{x}_j-b)}

如果把-w_{j}x_{j}-b简化为-x,该函数相应简化为:

f(x)=\frac{1}{1+exp(-x)}

函数对应的图像为:

图4

图4是平滑过渡图像,并且输出结果限定在(0,1)范围内。

绘制图4的代码为:

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
t=np.linspace(-10,10,100) #自变量
y0=np.exp(-t) #指数函数
y=1/(1+y0) #因变量
plt.plot(t,y) #绘制图像
plt.title('sigmoid() function') #图像上设置图名
plt.savefig('sigmoid() function.png') #保存图像
plt.show() #显示图像

【4】函数验证

为验证sigmoid()函数,可以在上述示例中的代码plt.plot(x,e[0,x]) #对阈值计算结果绘图

修改为:

plt.plot(x,1/(1+np.exp(-e[0,x]))) #对阈值计算结果绘图

此时运行代码获得的图像为:

图5

由图5可见,复杂多变的实际情况中,sigmoid()函数的输出结果也是在(0,1)范围内。所以,sigmoid()函数本身具有很强的实用性。

此时的完整代码为:

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a = np.random.randint(5,9,size=(1,5)) #矩阵
b = np.random.randint(1,5,size=(1,5)) #矩阵
c = np.random.randn(1,5) #矩阵
d = np.random.randn(1,5) #矩阵
#阈值开关
k=1
#空矩阵
e =np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果
f=0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 阈值计算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 阈值计算
if e[0,4]>0: #最后计算结果,超过阈值开关取1,否则取0f=1
else:f=0#绘制二元分类计算的结果
print('a=',a) #输出矩阵
print('b=',b) #输出矩阵
print('c=',c) #输出矩阵
print('d=',d) #输出矩阵
print('e=',e) #输出矩阵
print('f=',f) #输出矩阵
x=np.arange(0,5,1) #定义一个自变量
plt.plot(x,1/(1+np.exp(-e[0,x]))) #对阈值计算结果绘图
plt.savefig('sigmoid.png') #保存图像
plt.show() #输出图像

需要注意的是,由于元素的权重使用随机数生成,所以每次运行上述程序,获得的效果可能不一样。

【5】总结

探究了sigmoid()函数,研究了多因素的综合作用。

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

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

相关文章

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法:通过type函数返回数值的类型,然后通过setValue来构造一个QVariant类型的返回值。 函数: QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化,而另一个BAHD酰基转移酶则仅催化紫草素的对映…

CLion开发Qt桌面

IDE:CLion Qt Qt版本:5.12 学习正点原子的嵌入式Linux开发板时,使用Qt Creator写代码不是很方便,遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1,配置工具链 找到Qt的安装目录,此处为E:\Tools\…

【学术会议-第五届机械设计与仿真国际学术会议(MDS 2025) 】前端开发:技术与艺术的完美融合

重要信息 大会官网:www.icmds.net 大会时间:2025年02月28日-03月02日 大会地点:中国-大连 会议简介 2025年第五届机械设计与仿真国际学术会议(MDS 2025) 将于2025年02月28-3月02日在中国大连召开。MDS 2025将围绕“机械设计”…

84,【8】BUUCTF WEB [羊城杯 2020]Blackcat

进入靶场 音乐硬控我3分钟 回去看源码 <?php // 检查 POST 请求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一个字段为空&#xff0c;则输出错误信息并终止脚本执行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(请提供 Black-C…

人工智能:从基础到前沿

目录 目录 1. 引言 2. 人工智能基础 2.1 什么是人工智能&#xff1f; 2.2 人工智能的历史 2.3 人工智能的分类 3. 机器学习 3.1 机器学习概述 3.2 监督学习 3.3 无监督学习 3.4 强化学习 4. 深度学习 4.1 深度学习概述 4.2 神经网络基础 4.3 卷积神经网络&#…

漏洞情报:为什么、要什么和怎么做

漏洞一直是网络攻防的焦点所在&#xff0c;因为漏洞直接或间接影响安全性的核心方面——权限。攻击者挖掘和利用漏洞&#xff0c;获取非授权的权限&#xff1b;防御方定位和消除漏洞&#xff0c;监测和阻断漏洞的利用&#xff0c;使攻击者无法利用漏洞达到其目的。漏洞信息本质…

leetcode——删除链表的倒数第N个节点(java)

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xf…

正则表达式以及Qt中的使用

目录 一、正则表达式 1、基本匹配&#xff1a; 2、元字符&#xff1a; 2.1 .运算符&#xff1a; 2.2 字符集&#xff1a; 2.3 重复次数&#xff1a; 2.4 量词{} 2.5 特征标群() 2.6 或运算符 2.7 \反斜线转码特殊字符 2.8 锚点 3、简写字符 4、零宽度断言 4.1 正…

流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理

概述 背景 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长&#xff0c;企业需要具备强大的数据集成能力来高效地处理和分析数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业快速实现多源数据的采集、…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅&#xff08;Pub/Sub&#xff09;消息系统&#xff0c;最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点&#xff0c;提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力&#xff0c;适用于大规模分布式系…

VS Code i18n国际化组件代码code显示中文配置 i18n ally

VUE项目做i18n国际化之后&#xff0c;代码中的中文都变成了code这时的代码就会显得非常难读&#xff0c;如果有一个插件能把code转换成中文显示就好了 vscode插件搜索“i18n ally” 在项目根文件夹下创建文件&#xff1a;.vscode/settings.json settings.json 内容如下 {"…

图论汇总1

1.图论理论基础 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种类 整体上一般分为 有向图 和 无向图。 有向图是指 图中边是有方向的&a…

为什么机器学习中梯度下降是减去斜率,而不是按照其数学意义减去斜率的倒数

做个简单假设&#xff0c;Loss函数的某一个参数的函数曲线是二次方程&#xff0c;其导数函数为 r 2 ∗ w r 2*w r2∗w 按照斜率意义来看&#xff0c;要减去斜率倒数 降低LOSS需要将w1更新为w2&#xff0c;所以更新公式为 w w − Δ L Δ w w w - \frac{\Delta L}{\Delta w…

本地大模型编程实战(02)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…

windows平台intel-vpl编译

需要先在本机编译好opencl库 git clone --recursive https://github.com/KhronosGroup/OpenCL-SDK.git cmake -A x64 -T v143 -D OPENCL_SDK_BUILD_OPENGL_SAMPLESOFF -B OpenCL-SDK\build -S OpenCL-SDKcmake --build OpenCL-SDK\build --config Releasecmake --install O…

[C语言日寄]exit函数的使用及其拓展

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

激光雷达和相机早期融合

通过外参和内参的标定将激光雷达的点云投影到图像上。 • 传感器标定 首先需要对激光雷达和相机&#xff08;用于获取 2D 图像&#xff09;进行外参和内参标定。这是为了确定激光雷达坐标系和相机坐标系之间的转换关系&#xff0c;包括旋转和平移。通常采用棋盘格等标定工具&…

iic、spi以及uart

何为总线&#xff1f; 连接多个部件的信息传输线&#xff0c;是部件共享的传输介质 总线的作用&#xff1f; 实现数据传输&#xff0c;即模块之间的通信 总线如何分类&#xff1f; 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…

DeepSeek明确学术研究方向效果如何?

明确学术研究方向 在学术写作中&#xff0c;选择一个出色的研究主题至关重要&#xff0c;因为它直接关系到论文是否能登上高级别的学术期刊。不少学者在这个过程中走入了误区&#xff0c;他们往往将大把的时间花在写作本身&#xff0c;而忽略了对选题的深入思考&#xff0c;这…