人工神经网络ANN

news2024/11/13 10:13:24

文章目录

  • 1. 人工神经网络简介
    • 1.1 生物神经网络
    • 1.2 人工神经网络
  • 2. 人工神经网络原理
    • 2.1 ANN的基本构造
      • 2.1.1 神经元的结构模型
      • 2.1.2 网络拓扑结构
    • 2.2 学习规则
    • 2.3 学习算法
  • 3. 人工神经网络特点
  • 4. 人工神经网络的Python应用
  • 5. 源码仓库地址

1. 人工神经网络简介

1.1 生物神经网络

人工神经网络的灵感来自其生物学对应物。生物神经网络使大脑能够以复杂的方式处理大量信息。大脑的生物神经网络由大约1000亿个神经元组成,这是大脑的基本处理单元。神经元通过彼此之间巨大的连接(称为突触)来执行其功能。

人体神经元模型如下图所示:

在这里插入图片描述

  • 接收区(receptive zone):树突接收到输入信息。
  • 触发区(trigger zone):位于轴突和细胞体交接的地方,决定是否产生神经冲动。
  • 传导区(conducting zone):由轴突进行神经冲动的传递。
  • 输出区(output zone):神经冲动的目的就是要让神经末梢,突触的神经递质或电力释出,才能影响下一个接受的细胞(神经元、肌肉细胞或是腺体细胞),此称为突触传递。

1.2 人工神经网络

人工神经网络定义为:人工神经网络是一种由具有自适应性的简单单元构成的广泛并行互联的网络,它的组织结构能够模拟生物神经系统对真实世界所做出的交互反应。

人工神经网络的结构如下图所示:

在这里插入图片描述

  • 输入层:输入层接收特征向量 x 。
  • 输出层:输出层产出最终的预测 h 。
  • 隐含层:隐含层介于输入层与输出层之间,之所以称之为隐含层,是因为当中产生的值并不像输入层使用的样本矩阵 X 或者输出层用到的标签矩阵 y 那样直接可见。

人工神经网络由一个输入层和一个输出层组成,其中输入层从外部源(数据文件,图像,硬件传感器等)接收数据,一个或多个隐藏层处理数据,输出层提供一个或多个数据点基于网络的功能。根据不同的问题,可以加入多个隐藏层,由图中这种全连接改为部 分连接,甚至是环形连接等。

2. 人工神经网络原理

人工神经网络的强大之处在于,它拥有很强的学习能力。在得到一个训练集之后,它能通过学习提取所观察事物的各个部分的特征,将特征之间用不同网络节点连接,通过训练连接的网络权重,改变每一个连接的强度,直到顶层的输出得到正确的答案。

神经网络算法大致过程如下:
第一步,我们要预先设定一种网络结构和激活函数,这一步其实很困难,因为网络结构可以无限拓展,要知道什么样的结构才符合我们的问题需要做大量的试验。
第二步,初始化模型中的权重。模型中的每一个连接都会有一个权重,在初始化的时候可以都随机给予一个值。
第三步,就是根据输入数据和权重来预测结果。由于最开始的参数都是随机设置的,所以获得的结果肯定与真实的结果差距比较大,所以在这里要计算一个误差,误差反映了预测结果和真实结果的差距有多大。
最后一步,模型要调节权重。这里我们可以参与的就是需要设置一个“学习率”,这个学习率是针对误差的,每次获得误差后,连接上的权重都会按照误差的这个比率来进行调整,从而期望在下次计算时获得一个较小的误差。经过若干次循环这个过程,我们可以选择达到一个比较低的损失值的时候停止并输出模型,也可以选择一个确定的循环轮次来结束。

2.1 ANN的基本构造

人工神经网络是许多神经元经联接而成的网络结构。因此,ANN的构造有两层含义:1. 神经元的结构;2. 网络互联结构(拓扑结构)。

2.1.1 神经元的结构模型

根据前面对生物神经元的分析,应具有以下特点:
(a) 神经元是一个多输入、单输出的元件。
(b) 神经元是一个具有非线性输入/输出特性的元件。表现在只有当来自各神经突触的活动电位达到一定强度后,该神经才能被激活,释放出神经传递化学物质,发出本身的活动电位脉冲。
(c) 神经元的连接具有可塑性,表现在其活动电位脉冲的传递强度依靠神经传递化学物质的释放量及突触间隙的变化量,可以进行调节。
(d) 神经元的输出响应,是各个输入的综合结果。

2.1.2 网络拓扑结构

网络拓扑结构即神经元的联接形式,从大的方面来看,ANN网络拓扑结构可分为层次结构、模块结构和层次模块结构等几种。
1.层次结构:神经元的联接按层次排列。
2.模块结构:主要特点是将整个网络按功能划分为不同的模块,每个模块内部的神经元紧密互联,并完成各自特定的功能,模块之间再互联以完成整体功能。
3.层次模块结构:将模块结构和层次结构结合起来,使之更接近人脑神经系统的结构,这也是目前为人们广泛注意的一种新型网络互联模式。

根据网络中神经元的层数不同,可将神经网络分为单层网络和多层网络;

根据同层网络神经元之间有无相互联接以及后层神经元与前层神经元有无反馈作用的不同,可将神经网络分为以下多种。
(a)前向网络: 网络中的神经元分层排列,每个神经元只与前一层神经元相连,层间神经元无连接。最上一层为输出层,最下一层为输入层,中间层称为隐层。
(b)从输出到输入有反馈的前向网络: 从输出到输入有反馈环节的前向网络。
(c)层内互连前向网络: 通过层内神经元的相互连接,可以实现同一层神经元间的相互制约,从而可以将层内神经元分为几组,让每组作为一个整体来动作。
(d)互连网络:分为局部互连和全互连两种。全互连网络中每个神经元的输出都与其他神经元相连;而局部互连网络中,有些神经元间没有连接关系。

2.2 学习规则

神经网络要能工作必须首先进行学习,学习规则多种多样,一般可以归结为以下两类:
(1)有指导学习:不但需要学习用的输入事例(训练样本,通常为一矢量),同时还要求与之对应的表示所需期望输出的目标矢量。进行学习时,首先计算一个输入矢量的网络输出,然后同相应的目标输出比较,比较结果的误差用来按规定的算法改变加权。
(2)无指导学习:不要求有目标矢量,网络通过自身的“经历”来学会某种功能,在学习时,关键不在于网络实际输出是否与外部的期望输出相一致,而在于调整权重以反映学习样本的分布,因此整个训练过程实质是抽取训练样本集的统计特性。特别适用于对未知事物的研究。

工程实践中,有指导学习和无指导学习并不是相互冲突的,目前已经出现了一些融合有指导学习和无指导学习的训练算法。如在应用有指导学习训练一个网络后,再利用一些后期的无指导学习来使得网络自适应于环境的变化。

2.3 学习算法

学习算法是人工神经网络研究的主要内容和中心环节,许多性能各异的神经网络的差异也主要体现在学习算法的不同上,同时,对于神经网络学习算法也是至今人们研究得最多的一个方面。

截止目前,人们已先后提出了误差反向传播算法(BP算法)、Hopfield算法、自适应共振理论算法(ART算法)、自组织特征映射算法(Kohonen算法)等。

误差反向传播算法简称BP算法,它是Werbos等人提出的一个有监督训练的多层神经网络算法。在网络学习阶段,其每一个训练范例在网络中经过两个方向的传递计算。一遍向前传播计算,从输入层开始传递至各层,经过处理后产生一个输出,由此可得到一个该实际输出与其理想输出之差的误差矢量;此后,再进行反向传播计算,即从输出层开始至输入层结束,根据误差矢量并以一定的速度对各权值依次进行修正。

BP算法有很强的数学基础,扩展了神经网络的应用范围,已有许多成功的应用实例,对神经网络研究的再次兴起起过很大作用。

3. 人工神经网络特点

优点:
(1)具有自学习功能 。
(2)具有联想存储功能。
(3)具有高速寻找优化解的能力。

缺点:
(1)神经网络需要大量数据,非常消耗资源,开销也非常大的,而且训练时间长,还需要耗费很大的人力物力。
(2)神经网络在概括方面很不好。
(3)神经网络是不透明的。

4. 人工神经网络的Python应用

在 Scikit 中神经网络被称为多层感知器(Multi-layer Perceptron),它可以用于分类或回归的非线性函数。用于分类的模块是 MLPClassifier,而用于回归的模块则是 MLPRegressor。

MLPClassifier 主要用来做分类,下面用 MLPClassifier 在鸢尾花数据上做测试。其函数原型如下:

clf = MLPClassifier(solver=’sgd’,activation=’relu’,alpha=1e-4,hidden_layer_sizes=(50,50),random_state=1,max_iter=10,verbose=10,learning_rate_init=.1)

参数说明:

hidden_layer_sizes:例如hidden_layer_sizes=(50, 50),表示有两层隐藏层,第一层隐藏层有50个神经元,第二层也有50个神经元。

Activation:{‘identity’, ‘logistic’, ‘tanh’, ‘relu’},默认‘relu’。

solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默认adam,用来优化权重。

alpha:float,可选的,默认0.0001,正则化项参数。

learning_rate:学习率,用于权重更新,只有当solver为’sgd’时使用,{‘constant’,’invscaling’, ‘adaptive’},默认constant。

random_state:int 或RandomState,可选,默认None,随机数生成器的状态或种子。

max_iter:int,可选,默认200,最大迭代次数。

verbose:bool, 可选,默认False,是否将过程打印到stdout。

测试代码如下:

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()  # 导入数据集
X = iris['data']  # 获取自变量数据
y = iris['target']  # 获取因变量数据
X_train, X_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.2)  # 分割训练集和测试集
clf = MLPClassifier(solver='adam', alpha=1e-5, \
                    hidden_layer_sizes=(3,3), random_state=1,max_iter=100000,) # 创建神经网络分类器对象
clf.fit(X, y) # 训练模型
clf.score(X_test,y_test) # 模型评分

结果如下:

score= 0.9666666666666667

5. 源码仓库地址

🌼 图像处理、机器学习的常用算法汇总

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

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

相关文章

北通阿修罗2 Pro 多模板 连接Cemu 支持体感

需要使用体感的游戏基本上都是任天堂的游戏,如塞尔达。所以接下来针对CEMU模拟器介绍如何使用体感。 先看CEMU的手柄配置文档。 https://cemu.cfw.guide/controller-configuration.html 运动控制支持可能因手柄而异。任天堂Switch、Dualshock 4和DualSense手柄都支持…

Nik Color Efex 滤镜详解(5/5)

淡对比度 Pro Contrast 分析图像并为该图像创建特定的颜色,在保持画面细节的同时,实现更高的对比度。 校正色偏 Correct Color Cast 用于纠正色偏。 校正对比度 Correct Contrast 根据光影纠正对比度。 动态对比度 Dynamic Contrast 根据画面对象自动校…

【JY】浅析时程分析中的阻尼设置

(非线性)直接积分法、快速非线性分析(FNA)法等时程分析方法中的阻尼设置尤为重要,以SAP2000为例,进行抛砖引玉,各类软件做法也大同小异,可借鉴与学习。 模态阻尼 模态阻尼是用非耦合…

模拟电路系列分享-频率失真

目录 概要 整体架构流程 技术名词解释 技术细节 1.基本问题简介 2.线性失真 3.频率失真的危害 小结 概要 提示:这里可以添加技术概要 继续接着上一节的内容继续分享和学习, 整体架构流程 分三个部分,仔细的分享了失真方面的知识 技术名词…

团体程序设计天梯赛-练习集L1篇④

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

Spring Boot 日志的主要组件及其特点

Spring Boot 日志的主要组件及其特点 在开发应用程序时,日志是非常重要的一部分。它可以帮助我们了解应用程序的运行情况,发现并解决问题。在 Spring Boot 中,有许多不同的日志框架可供选择。本文将介绍 Spring Boot 日志的主要组件及其特点…

用OpenCV进行模板匹配

1. 引言 今天我们来研究一种传统图像处理领域中对象检测和跟踪不可或缺的方法——模板匹配,其主要目的是为了在图像上找到我们需要的图案,这听起来十分令人兴奋。 所以,事不宜迟,让我们直接开始吧! 2. 概念 模板匹…

哈夫曼树——数组实现

构造n个给定值节点构成的森林; 选择权值最小的两个构成叶子节点,根节点权值为两叶子节点之和, 删除原有的两棵树,将这棵树加入森林中; 重复这两部直到只有一棵树为止,此树就是哈夫曼树; #pr…

警惕这些“挂羊头卖狗肉”的高科技培训!

最近真的被误人子弟的教育骗子给气到! 事情是这样的,6月11号,我在2023 开放原子全球开源峰会上,遇到了一位从广东来北京参会的老师。 这位老师透露,他来自一所职业技术学院,学校师资挺不错的,可…

Spring Boot 如何配置日志级别和输出格式

Spring Boot 如何配置日志级别和输出格式 在开发一个应用程序时,日志记录是非常重要的一环。Spring Boot 提供了多种日志输出方式和配置选项,本文将介绍如何在 Spring Boot 应用程序中配置日志级别和输出格式。 配置日志级别 在 Spring Boot 应用程序中…

【知识点随笔分享 | 第一篇】避不开的浮点误差

引入: 各位在大一初入C语言的时候,老师肯定说过浮点数之间的比较要用做差法,当二者的差值特别小甚至于接近0的时候,这两个数就相等,不知道各位是否会有疑惑?为什么浮点数不可以直接进行比较呢? …

Nacos-手写配置中心基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明Nacos配置中心Naocs配置项Naocs配置集Naocs配置快照 需求分析核心功能代码实现AService模块BService模块NacosService模块NacosSDK模块 注意事项总结提升 概念说明 Nacos注册中心:https://blog.csdn.net/weixin_4549…

vs中运行时库简要说明

vs中右键单击工程 -->属性–>c/c->代码生成,进入如下菜单中: 可以看出有如下几个选项: 多线程(/MT):链接目标库为libcmt.lib 多线程调试(/MTd):链接目标库为libcmtd.lib 多线程DLL(/MD):链接目标…

02.GLM-130B

文章目录 前言泛读相关知识GPTBERTT5小结 背景介绍主要贡献和创新点GLM 6B 精读自定义Mask模型量化1TB 的中英双语指令微调RLHFPEFT训练策略 实验分析与讨论模型参数六个指标其他测评结果 代码复现(6B)环境准备运行调用代码调用网页服务命令行调用 模型微…

在 Python 中生成随机 4 位数字

文章目录 在 Python 中生成随机数使用 random 模块在 Python 中生成随机数使用 random.randint() 方法使用 random.randrange() 方法 使用替代方法在 Python 中生成随机数总结 Python 是一种高级解释型编程语言,全球大多数程序员都在使用它。 它在面向对象编程 (OOP…

SpringCloud Alibaba入门5之Hystrix的使用

我们继续在前一章的基础上进行学习。 SpringCloud Alibaba入门5之使用OpenFegin调用服务_qinxun2008081的博客-CSDN博客 上一节我们已经使用OpenFeign完成了服务间的调用,如果现在存在大量的服务,每个服务有若干个节点,其中一个节点发生故障…

Word技巧之【文档自动保存】

打工人的噩梦—电脑突然坏掉,文档还没保存!你是否遇到这种情况? 如果Word文档设置了自动保存,就不用太过担心了,只需要几个简单的操作就能设置好。还不知道的小伙伴,跟着小编一起看看吧。 设置Word文档自动…

一起来学R编程把—do.call 函数的应用

R语言由一个个基础函数组成,熟练灵活应用这些基础函数,有助于我们更好的学习R包及编程,这个专栏可能很多人不感兴趣,但是对提升自己很有帮助,感兴趣的朋友一起来学习。今天我们来介绍一下do.call函数的用法. do.call函数是一个非…

ChatGLM-6B阿里云部署

机器配置 重点关注指标:CPU、内存、GPU、GPU驱动 类型CPU内存GPU机器配置16核125GNVIDIA A100 80G # 查看显卡安装状态 nvidia-smi 安装必要的软件 git sudo apt-get update sudo apt-get install git git-lfs(大文件管理) sudo apt-get install git-lfs py…

从零开始手搓一个STM32与机智云的小项目——GPIO模拟时序控制外设1

文章目录 前言WS2812B1.模块简介2.时序介绍3.硬件介绍4.传输速率,以及帧数要求 代码1.初始化2.模拟时序1.复位函数2.发送0、1码3.封装发送函数 总结 前言 上一篇文章中介绍了整个板子的最基本功能模块——使用GPIO的通用输入输出实现简单的按键输入以及推挽输出控制…