通用图像识别的神经网络代码描述

合集下载

人脸识别核心算法及MATLAB代码

人脸识别核心算法及MATLAB代码

人脸识别核心算法在检测到人脸并定位面部关键特征点之后,主要的人脸区域就可以被裁剪出来,经过预处理之后,馈入后端的识别算法。

识别算法要完成人脸特征的提取,并与库存的已知人脸进行比对,完成最终的分类。

我们在这方面的主要工作包括:∙基于LGBP的人脸识别方法问题:统计学习目前已经成为人脸识别领域的主流方法,但实践表明,基于统计学习的方法往往会存在“推广能力弱”的问题,尤其在待识别图像“属性”未知的情况下,更难以确定采用什么样的训练图像来训练人脸模型。

鉴于此,在对统计学习方法进行研究的同时,我们还考虑了非统计模式识别的一类方法。

思路:对于给定的人脸图像,LGBP方法首先将其与多个不同尺度和方向的Gabor滤波器卷积(卷积结果称为Gabor特征图谱)获得多分辨率的变换图像。

然后将每个Gabor特征图谱划分成若干互不相交的局部空间区域,对每个区域提取局部邻域像素的亮度变化模式,并在每个局部空间区域内提取这些变化模式的空间区域直方图,所有Gabor特征图谱的、所有区域的直方图串接为一高维特征直方图来编码人脸图像。

并通过直方图之间的相似度匹配技术(如直方图交运算)来实现最终的人脸识别。

在FERET四个人脸图像测试集合上与FERET97的结果对比情况见下表。

由此可见,该方法具有良好的识别性能。

而且LGBP方法具有计算速度快、无需大样本学习、推广能力强的优点。

参见ICCV2005表.LGBP方法与FERET'97最佳结果的对比情况∙基于AdaBoost的Gabor特征选择及判别分析方法问题:人脸描述是人脸识别的核心问题之一,人脸识别的研究实践表明:在人脸三维形状信息难以准确获取的条件下,从图像数据中提取多方向、多尺度的Gabor特征是一种合适的选择。

使用Gabor特征进行人脸识别的典型方法包括弹性图匹配方法(EGM)和Gabor特征判别分类法(GFC)。

EGM在实用中需要解决关键特征点的定位问题,而且其速度也很难提高;而GFC则直接对下采样的Gabor特征用PCA降维并进行判别分析,尽管这避免了精确定位关键特征点的难题,但下采样的特征维数仍然偏高,而且简单的下采样策略很可能遗漏了非常多的有用特征。

人工智能深度学习技术练习(试卷编号242)

人工智能深度学习技术练习(试卷编号242)

人工智能深度学习技术练习(试卷编号242)说明:答案和解析在试卷最后1.[单选题]手写字识别模型中,输入层的节点个数为()A)28B)784C)1024D)5762.[单选题]在keras的自带模型中, Xception V1 模型的默认输入尺寸是()A)229x229B)299x299C)224x224D)244x2443.[单选题]训练神经网络可以修改的参数有()。

A)学习速率B)梯度下降参数C)回归参数D)RELU4.[单选题]负矩阵用那种形式表示()。

A)OB)AC)-AD)AT5.[单选题]( )是定义在单个样本上的,是指一个样本的误差A)损失函数(Loss Function)B)代价函数(Cost Function)C)目标函数(Object Function)D)范数6.[单选题]下列使用归一化操作的激活函数有:A)reluB)softmaxC)tanh7.[单选题]样本点数量相同的概率空间,可以等价互换。

A)是B)不能C)部分能D)部分不能8.[单选题]所有rnn中的门使用()激活函数处理A)RELUB)sigmoidC)softmaxD)tanh9.[单选题]假设我们有一个使用ReLU激活函数(ReLU activation function)的神经网络,假如我们把ReLU激活替换为线性激活,那么这个神经网络能够模拟出同或函数(XNOR function)吗?A)可以B)不好说C)不一定D)不能10.[单选题]item()在pytorch中的作用是A)获取数据值B)获取维度C)获取梯度D)获取降维后的结果11.[单选题]( )就是在不同的训练过程中随机扔掉一部分神经元。

也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。

但是它的权重得保留下来(只是暂时不更新而已)A)conv2dB)max_poolC)DropoutD)FC12.[单选题]能消除过拟合的方法是A)线性化B)非线性化C)归一化D)正则化13.[单选题]于Python的全局变量和局部变量,以下选项中描述错误的是()。

deeplearning tutorial (2) 原理简介+代码详解

deeplearning tutorial (2) 原理简介+代码详解

deeplearning tutorial (2) 原理简介+代码详解【原创实用版】目录一、Deep Learning 简介二、Deep Learning 原理1.神经网络2.梯度下降3.反向传播三、Deep Learning 模型1.卷积神经网络(CNN)2.循环神经网络(RNN)3.生成对抗网络(GAN)四、Deep Learning 应用实例五、Deep Learning 代码详解1.TensorFlow 安装与使用2.神经网络构建与训练3.卷积神经网络(CNN)实例4.循环神经网络(RNN)实例5.生成对抗网络(GAN)实例正文一、Deep Learning 简介Deep Learning 是一种机器学习方法,其主要目标是让计算机模仿人脑的工作方式,通过多层次的抽象表示来理解和处理复杂的数据。

Deep Learning 在图像识别、语音识别、自然语言处理等领域取得了显著的成果,成为当前人工智能领域的研究热点。

二、Deep Learning 原理1.神经网络神经网络是 Deep Learning 的基本构成单元,它由多个神经元组成,每个神经元接收一组输入信号,根据权重和偏置计算输出信号,并将输出信号传递给其他神经元。

神经网络通过不断调整权重和偏置,使得模型能够逐渐逼近目标函数。

2.梯度下降梯度下降是一种优化算法,用于求解神经网络的权重和偏置。

梯度下降算法通过计算目标函数关于权重和偏置的梯度,不断更新权重和偏置,使得模型的预测误差逐渐减小。

3.反向传播反向传播是神经网络中计算梯度的一种方法。

在训练过程中,神经网络根据实际输出和预期输出的误差,按照梯度下降算法计算梯度,然后沿着梯度反向更新权重和偏置,使得模型的预测误差逐渐减小。

三、Deep Learning 模型1.卷积神经网络(CNN)卷积神经网络是一种特殊的神经网络,广泛应用于图像识别领域。

CNN 通过卷积层、池化层和全连接层等操作,对图像进行特征提取和分类,取得了在图像识别领域的突破性成果。

神经网络的图像识别技术及方法分析

神经网络的图像识别技术及方法分析
图 像 识 别 技 术 是 当 前 发 展 起 来 的 一 种 新 型 技 术 , 主要 对某 些 对 象 的分类 和 描述 进 行研 究 ,可 以根 据 图像 识 别 提 出 的 问题 ,解 决人 类不 能 直接 解 决 的 问题 ,可 以 简 单 的将 其理 解 为 图像识 别 。
1.1 图像 识别 、图像处理 以及 图像理 解的关 系
1.2 人 工神 经 网络
人 工 神 经 网络 没 有 固定 概 念 ,通 常 人 们将 具 有 大 量 简单 计 算单 元 、单 元之 间连接 特 性和 方式 以及单 位 之 间连接形成的算法或模型称之为人工神经网络。不 同的 单 元特 性 、连 接方 式 和调 节规 律 将会 产 生各 种 不 同 的神 经 网络 模 型 。随着 信 息技 术 的发 展 ,信 息分 布 、储 存和 处理 方 式都 得到 了提升 ,开 始广 泛应 用 到智 能控制 学 习 、 信 息 处 理 、 模 式 识 别 等 领 域 中 ,具有 很 广 泛 的应 用 前 景 。尤其 多层 前 馈 网络 (BP),已经广泛 应 用 到函数 逼近 、 模 式 分类 和线 形 建模 中。
2 BP神 经 网络
2.1 分析 BP神经算 法
多层 网 络 的 组 成 可 以在 BP网 络 的 基 础 上 ,利 用 Window-Hoff算法 与 非线 性 转移 函 数组 成 。BP网络经 常 采 用梯 度 下 降 算法 计 算 。BP网络 结 构 算法 描 述 。第 一 , 将 网络 参 数 回 归到 初始 化状 态 ;学 习 网络 初始 矩 阵和 学 习因子等参数 ;第二 ,实施网络训练操作 ,满足系统要
求 ;第三 ,传 播过 程 ,根 据 系统指 定模 式 完成 数据 输入 , 并进 行计 算 ,如果 存在 误差 执行 继续 计算 后 向传 播过 程 。 后 向传播 过 程重 点进 行 同一 层 单元 误差 计 算 、修正 权 职 和 阀值等 操作 。

神经网络及深度学习(包含matlab代码)

神经网络及深度学习(包含matlab代码)

f ( x)
1 1 e Qx
(2.3)
它反映了神经元的饱和特性。 上式中, Q 为表示神经元非线性的参数, 称增益值(Gain), 也称调节参数。 Q 值越大, S 形曲线越陡峭; 反之, Q 值越小, S 形曲线越平坦; 一般取 Q=1。 (b)双曲正切激励函数,一般取为(-1,1)内连续取值:
神经网络及深度学习
(包含 MATLAB 仿真) 人工神经网络(Artificial Neural Network,即 ANN ) ,作为对人脑最简单的一种抽象和 模拟,是人们模仿人的大脑神经系统信息处理功能的一个智能化系统,是 20 世纪 80 年代 以来人工智能领域兴起的研究热点。 人工神经网络以数学和物理方法以及信息处理的角度对 人脑神经网络进行抽象, 并建立某种简化模型, 旨在模仿人脑结构及其功能的信息处理系统。 人工神经网络最有吸引力的特点就是它的学习能力。因此从 20 世纪 40 年代人工神经 网络萌芽开始, 历经两个高潮期及一个反思期至 1991 年后进入再认识与应用研究期, 涌现 出无数的相关研究理论及成果, 包括理论研究及应用研究。 最富有成果的研究工作是多层网 络 BP 算法,Hopfield 网络模型,自适应共振理论,自组织特征映射理论等。因为其应用价 值, 该研究呈愈演愈烈的趋势, 学者们在多领域中应用人工神经网络模型对问题进行研究优 化解决。 人工神经网络是由多个神经元连接构成,因此欲建立人工神经网络模型必先建立人工 神经元模型,再根据神经元的连接方式及控制方式不同建立不同类型的人工神经网络模型。 一、人工神经元及神经网络 1.1 人工神经元模型 仿生学在科技发展中起着重要作用,人工神经元模型的建立来源于生物神经元结构的 仿生模拟,用来模拟人工神经网络。人们提出的神经元模型有很多,其中最早提出并且影响 较大的是 1943 年心理学家 McCulloch 和数学家 W. Pitts 在分析总结神经元基本特性的基础上 首先提出的 MP 模型。该模型经过不断改进后,形成现在广泛应用的 BP 神经元模型。人工 神经元模型是由人量处理单元厂泛互连而成的网络,是人脑的抽象、简化、模拟,反映人脑 的基本特性。一般来说,作为人工神经元模型应具备三个要素: (1) 具有一组突触或连接,常用 wij 表示神经元 i 和神经元 j 之间的连接强度。 (2) 具有反映生物神经元时空整合功能的输入信号累加器 。 (3) 具有一个激励函数 f 用于限制神经元输出。激励函数将输出信号限制在一个允许 范围内。 一个典型的人工神经元模型如图 1-11-1 所示。

人工智能算法入门考试

人工智能算法入门考试

人工智能算法入门考试(答案见尾页)一、选择题1. 人工智能算法的基础是什么?A. 机器学习B. 深度学习C. 自然语言处理D. 计算机视觉2. 以下哪个是人工智能算法的一种?A. 决策树B. 随机森林C. 神经网络D. 支持向量机3. 人工智能算法在哪些领域有广泛应用?A. 医疗保健B. 交通运输C. 金融服务D. 所有以上领域4. 机器学习中,以下哪个概念描述了模型的预测能力?A. 精确率B.召回率C. F1 分数D. A和B5. 在深度学习中,哪种类型的神经网络通常用于图像识别任务?A. 卷积神经网络(CNN)B. 循环神经网络(RNN)C. 长短期记忆网络(LSTM)D. 以上都可以6. 人工智能算法与传统计算机算法的主要区别是什么?A. 计算能力B. 学习能力C. 交互性D. 并行性7. 在人工智能中,什么是“黑箱”模型?A. 不能解释模型的决策过程B. 可以完全解释模型的决策过程C. 模型决策过程可以部分解释D. 没有实际模型8. 人工智能算法的哪个发展方向是模拟人类大脑的工作方式?A. 机器学习B. 深度学习C. 强化学习D. 人工神经网络9. 在人工智能中,什么是“训练集”?A. 训练模型的数据集合B. 训练模型的硬件设备C. 训练模型的软件环境D. 训练模型的算法10. 人工智能算法的未来发展趋势是什么?A. 更加智能化B. 更加广泛的应用C. 更加普及到各行各业D. A和B11. 什么是人工智能算法?A. 人工智能算法是一种计算机程序B. 人工智能算法是一组用于解决人工智能问题的规则和程序C. 人工智能算法是一种模拟人类智能行为的计算模型D. 人工智能算法是一种数据挖掘技术12. 人工智能算法可以分为哪几类?A. 机器学习算法B. 深度学习算法C. 自然语言处理算法D. 计算机视觉算法13. 机器学习算法中,哪种算法不是无监督学习算法?A. K-均值聚类B. 线性回归C. 逻辑回归D. 支持向量机14. 深度学习算法中,哪种算法不是卷积神经网络的一种?A. 循环神经网络B. 长短期记忆网络C. 卷积神经网络D. 调整线性单元15. 自然语言处理算法中,哪种算法主要用于情感分析?A. 文本分类算法B. 词袋模型C. 得到向量算法D. 注意力机制16. 计算机视觉算法中,哪种算法可以用于物体检测?A. 霍夫变换B. 边缘检测C. K-均值聚类D. YOLO(You Only Look Once)17. 人工智能算法在哪个领域有广泛的应用?A. 医疗保健B. 金融C. 教育D. 所有领域18. 人工智能算法的发展历程可以分为几个阶段?A. 早期研究B. 快速发展期C. 稳定应用期D. 高级阶段19. 人工智能算法的未来发展方向是什么?A. 提高算法性能B. 提高算法可解释性C. 降低算法成本D. 扩大应用领域20. 在人工智能算法中,哪种算法通常用于模式识别?A. 决策树B. 支持向量机C. 随机森林D. 神经网络21. 什么是人工智能?A. 人工智能是一种模拟人类智能的技术和系统B. 人工智能可以替代人类进行所有的思考和工作C. 人工智能只能在特定领域内应用D. 人工智能的发展前景充满了不确定性22. 人工智能的基本组成包括哪些?A. 硬件和软件B. 数据和算法C. 机器学习和深度学习D. 人工智能语言和框架23. 在人工智能中,哪种技术是用于处理大量数据的?A. 机器学习B. 深度学习C. 自然语言处理D. 计算机视觉24. 以下哪个不是人工智能的应用领域?A. 医疗保健B. 交通管理C. 农业生产D. 金融投资25. 人工智能的发展历程可以分为几个阶段?A. 初创期B. 成熟期C. 衰退期D. 繁荣期26. 在人工智能中,哪种技术是用于模拟人类智能行为的?A. 神经网络B. 专家系统C. 模糊逻辑D. 遗传算法27. 人工智能中的机器学习技术包括哪些方法?A. 监督学习B. 无监督学习C. 强化学习D. 集成学习28. 在人工智能中,哪种技术是用于将人类语言转化为计算机可以理解的代码?A. 自然语言处理B. 语音识别C. 计算机视觉D. 机器翻译29. 人工智能的发展对于就业市场有什么影响?A. 会导致某些岗位的消失B. 会创造新的就业机会C. 会使所有工作变得更容易D. 会对经济发展产生负面影响30. 以下哪个因素对人工智能的发展最为关键?A. 计算能力的提升B. 互联网的出现C. 人类的创造力D. 政策和法规的支持31. 人工智能算法的基础是什么?A. 机器学习B. 深度学习C. 自然语言处理D. 计算机视觉32. 以下哪个不是人工智能算法的应用领域?A. 医疗诊断B. 交通控制C. 虚拟现实D. 农业生产33. 人工智能中的深度学习与机器学习的主要区别是什么?A. 深度学习模型包含多个隐层B. 机器学习模型需要手动特征工程C. 深度学习模型的训练速度更快D. 机器学习模型可以处理结构化数据34. 人工智能算法中,哪种算法是用于模式识别?A. 随机森林B. 支持向量机(SVM)C. 神经网络D. K-均值聚类35. 人工智能在自然语言处理中的应用有哪些?A. 语音识别B. 机器翻译C. 情感分析D. 文本摘要36. 人工智能算法中,哪种算法是用于解决优化问题?A. 线性规划B. 随机搜索C. 动态规划D. 蚁群算法37. 人工智能中的卷积神经网络(CNN)主要用于哪种类型的图像识别任务?A. 基于颜色的分类B. 基于形状的分类C. 基于纹理的分类D. 基于对象的识别38. 人工智能算法中,哪种算法是用于时间序列预测?A. 长短期记忆网络(LSTM)B. 支持向量机(SVM)C. 神经网络D. 随机森林39. 在人工智能中,什么是“黑箱”模型?A. 一个不透明的模型,其内部运作不可见B. 一个需要大量数据的模型C. 一个简单的模型,易于理解和解释D. 一个高度复杂的模型,难以理解40. 人工智能算法的发展对于未来社会的影响是什么?A. 提高生产效率B. 促进教育公平C. 解决资源短缺问题D. 增加就业机会二、问答题1. 什么是人工智能?请简述人工智能的定义及其发展历程。

【图像识别】基于卷积神经网络(CNN)实现垃圾分类Matlab源码

【图像识别】基于卷积神经网络(CNN)实现垃圾分类Matlab源码

【图像识别】基于卷积神经⽹络(CNN)实现垃圾分类Matlab源码⼀、垃圾分类如何通过垃圾分类管理,最⼤限度地实现垃圾资源利⽤,减少垃圾处置量,改善⽣存环境质量,是当前世界各国共同关注的迫切问题之⼀。

根据国家制定的统⼀标准,现在⽣活垃圾被⼴泛分为四类,分别是可回收物、餐厨垃圾、有害垃圾和其他垃圾。

可回收物表⽰适宜回收和资源利⽤的垃圾,主要包括废纸、塑料、玻璃、⾦属和布料五⼤类,⽤蓝⾊垃圾容器收集,通过综合处理回收利⽤。

餐厨垃圾包括剩菜剩饭、⾻头、菜根菜叶、果⽪等⾷品类废物,⽤绿⾊垃圾容器收集等等。

但是随着深度学习技术的发展,为了简单⾼效地对⽣活垃圾进⾏识别分类,本篇⽂章将实现⼀种基于卷积神经⽹络的垃圾分类识别⽅法。

该⽅法只需要对图像进⾏简单的预处理,CNN模型便能够⾃动提取图像特征且池化过程能够减少参数数量,降低计算的复杂度,实验结果表明卷积神经⽹络,能克服传统图像分类算法的诸多缺点,当然更为复杂的模型等待⼤家去实验研究。

但是⽬前认为采⽤VGG或者global 池化⽅式可能效果更好⼀点。

⼆、卷积神经⽹络CNN卷积神经⽹络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经⽹络⾮常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。

每个神经元都接收⼀些输⼊,并做⼀些点积计算,输出是每个分类的分数,普通神经⽹络⾥的⼀些计算技巧到这⾥依旧适⽤。

所以哪⾥不同呢?卷积神经⽹络默认输⼊是图像,可以让我们把特定的性质编码⼊⽹络结构,使是我们的前馈函数更加有效率,并减少了⼤量参数。

具有三维体积的神经元(3D volumes of neurons)卷积神经⽹络利⽤输⼊是图⽚的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经⽹络的深度,⽽是⽤来描述神经元的) 。

⽐如输⼊的图⽚⼤⼩是 32 × 32 × 3 (rgb),那么输⼊神经元就也具有 32×32×3 的维度。

基于 CNN-SVM-GA 的图像分类系统的设计与实现代码大全

基于 CNN-SVM-GA 的图像分类系统的设计与实现代码大全

基于CNN-SVM-GA的图像分类系统的设计与实现1.1题目的主要研究内容(1)工作的主要描述使用CNN-SVM-GA遗传算法对图像进行分类。

对图像数据集进行数据预处理,并将数据集分为CIFAR-10数据集训练集和测试集;建立卷积神经网络模型,用第一步的训练集和测试集对此模型进行训练;提取训练好的模型全连接层前的所有层构成一个新的模型,此模型输出的是一个特征向量;对提取出的特征向量进行PCA特征降维,减少SVM的训练时间,形成新的训练集和测试集去训练SVM模型,用遗传算法优化支持向量机的g和c参数。

(2)系统流程图图11.2题目研究的工作基础或实验条件(1)硬件环境(MacBook Pro)(2)软件环境(pycharm,python3.9)1.3理论基础(1)卷积神经网络(CNN)卷积神经网络(CNN)是典型的前馈神经网络,由输入层,隐藏层和输出层组成。

隐藏层由卷积层,池化层和全连接层组成。

卷积模拟单个神经元对视觉刺激的反应。

它使用卷积层卷积输入数据,然后将结果传输到下一层。

卷积层由一组卷积核组成。

尽管这些内核具有较小的感知视野,但是内核延伸到输入数据的整个深度。

卷积运算可以提取输入数据的深层特征。

卷积神经网络通过卷积、池化等操作可以实现特征的自动提取,再通过全连接层实现分类。

卷积神经网络的结构:一般地,卷积神经网络由输入层、卷积层、RELU层、池化层和全连接层构成,通过梯度下降的方式训练网络模型的参数,从而实现分类。

下面将对每类层进行介绍。

卷积层。

卷积神经网络的核心功能(特征提取)由卷积层完成。

卷积层由许多可学习的卷积核(滤波器)构成,滤波器按照一定的步长对输入的张量进行遍历,当遇到某些类型的形状特征时就激活。

池化层。

池化层又可称为下采样层,通过池化操作可以减少特征图的参数量,减少运算量。

池化层对每个通道的特征图进行操作,不改变通道数,但减少每个通道的特征图的大小。

常用的池化操作有均值池化和最大池化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

写人脸检测程序的时候顺带写的,网络格式是靠读入一个文件定义的,文件的格式如下:输入图像长输入图像宽隐层神经元个数输出神经元个数不同网络结构数量[连接位置不同的隐层神经元的个数连接的隐层神经元个数][隐层神经元连接的输入神经元的位置表]下面是一个例子:24 28 52 1316 321 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 41 1 1 1 1 12 2 2 2 2 23 3 3 3 3 34 4 4 4 4 45 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 85 5 5 5 5 56 6 6 6 6 67 7 7 7 7 78 8 8 8 8 89 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 129 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 1213 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 1613 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 1613 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 1613 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 4 81 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 21 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 23 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 46 121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 45 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 56 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6下面是程序代码:typeTSingleExtendedArray = array of extended; TDoubleExtendedArray = array of array of extended;TSamples = packed recordIns: TSingleExtendedArray;Outs: TSingleExtendedArray;end;typeTGraphicBpnn = classprivateprocedure BackPropagate(t: TSingleExtendedArray; n, m: extended);function UpDate(inputs: TSingleExtendedArray): extended;publicsamplecounts, TestCounts: longint;procedure AddToTrain(Ins, Outs: TSingleExtendedArray);procedure AddToTest(Ins, Outs: TSingleExtendedArray);procedure SaveToFile(FileName: string);procedure LoadFromFile(FileName: string);procedure Train(n, m: extended);function Init(FileName: string): boolean;function Predict(Ins: TSingleExtendedArray): extended;function Test: extended;destructor Destroy; override;privatenI, nH, nO: longint;aI, aH, aO, Output_Deltas, Hidden_Deltas: TSingleExtendedArray;wI, wO, cI, cO: TDoubleExtendedArray;Connections: array of array of boolean;Samples: array of TSamples;TestSet: array of TSamples;end;implementationfunction TGraphicBpnn.Init(FileName: string): boolean;vari, j, k, fi, fj: longint;nIw, nIh, RopMax, RopNum, RopTypes: longint;RopMap: array of longint;beginAssignFile(Input, FileName);ReSet(Input);Readln(Input, nIw, nIh, nH, nO);nI := nIw * nIh;setlength(aI, nI);setlength(aH, nH);setlength(aO, nO);for i := 0 to nI - 1 do aI[i] := 1;for i := 0 to nH - 1 do aH[i] := 1;for i := 0 to nO - 1 do aO[i] := 1;setlength(wI, nI, nH);setlength(wO, nH, nO);setlength(cI, nI, nH);setlength(cO, nH, nO);setlength(Connections, nI, nH);for i := 0 to nI - 1 dofor j := 0 to nH - 1 doConnections[i, j] := False;Readln(RopTypes); fj := 0;for k := 1 to RopTypes do beginReadln(RopMax, RopNum);setlength(RopMap, nI);fi := 0;for i := 1 to nIh do beginfor j := 1 to nIw do beginRead(RopMap[fi]);Inc(fi);end;Readln;end;fi := 0;for i := 1 to RopNum do beginInc(fi);if fi > RopMax then fi := 1;for j := 0 to nI - 1 doif RopMap[j] = fi then Connections[j, fj] := true;Inc(fj);end;end;setlength(Output_Deltas, nO);setlength(Hidden_Deltas, nH);randomize;for i := 0 to nI - 1 dofor j := 0 to nH - 1 do begincI[i, j] := 0;wI[i, j] := random(40000) / 10000 - 2;end;for i := 0 to nH - 1 dofor j := 0 to nO - 1 do begincO[i, j] := 0;wO[i, j] := random(40000) / 10000 - 2;end;setlength(Samples, $100); setlength(TestSet, $100);samplecounts := 0; TestCounts := 0;CloseFile(Input);end;procedure TGraphicBpnn.BackPropagate(t: TSingleExtendedArray; n, m: extended); vari, j, k: Longint;Sum, Change: extended;beginfor i := 0 to nO - 1 doOutput_Deltas[i] := aO[i] * (1 - aO[i]) * (t[i] - aO[i]);for j := 0 to nH - 1 do beginSum := 0;for k := 0 to nO - 1 doSum := Sum + Output_Deltas[k] * wO[j, k];Hidden_Deltas[j] := aH[j] * (1 - aH[j]) * Sum;end;for j := 0 to nH - 1 dofor k := 0 to nO - 1 do beginChange := Output_Deltas[k] * aH[j];wO[j, k] := wO[j, k] + n * Change + m * cO[j, k];cO[j, k] := Change;end;for i := 0 to nI - 1 dofor j := 0 to nH - 1 doif Connections[i, j] then beginChange := Hidden_Deltas[j] * aI[i];wI[i, j] := wI[i, j] + n * Change + m * cI[i, j];cI[i, j] := Change;end;end;function TGraphicBpnn.UpDate(inputs: TSingleExtendedArray): extended; vari, j, k: Longint;Sum: extended;beginfor i := 0 to nI - 1 doaI[i] := Inputs[i];for j := 0 to nH - 1 do beginSum := 0;for i := 0 to nI - 1 doif Connections[i, j] thenSum := Sum + aI[i] * wI[i, j];aH[j] := 1 / (1 + Exp(-Sum));end;for k := 0 to nO - 1 do beginSum := 0;for j := 0 to nH - 1 doSum := Sum + aH[j] * wO[j, k];aO[k] := 1 / (1 + Exp(-Sum));end;UpDate := aO[0];end;procedure TGraphicBpnn.Train(n, m: extended);var i: Longint;beginfor i := 0 to samplecounts - 1 do beginUpDate(Samples[i].Ins);BackPropagate(Samples[i].Outs, n, m);end;end;procedure TGraphicBpnn.AddToTrain(Ins, Outs: TSingleExtendedArray);var i: longint;beginif samplecounts > High(Samples) then setlength(Samples, samplecounts + $100); setlength(Samples[samplecounts].Ins, nI);setlength(Samples[samplecounts].Outs, nO);for i := 0 to nI - 1 do Samples[samplecounts].Ins[i] := Ins[i];for i := 0 to nO - 1 do Samples[samplecounts].Outs[i] := Outs[i];Inc(samplecounts);end;procedure TGraphicBpnn.AddToTest(Ins, Outs: TSingleExtendedArray);var i: longint;beginif TestCounts > High(TestSet) then setlength(TestSet, TestCounts + $100); setlength(TestSet[TestCounts].Ins, nI);setlength(TestSet[TestCounts].Outs, nO);for i := 0 to nI - 1 do TestSet[TestCounts].Ins[i] := Ins[i];for i := 0 to nO - 1 do TestSet[TestCounts].Outs[i] := Outs[i];Inc(TestCounts);end;procedure TGraphicBpnn.SaveToFile(FileName: string);vari, j, k: longint;SaveStream: TMemoryStream;beginSaveStream := TMemoryStream.Create;SaveStream.Seek(0, 0);for i := 0 to nI - 1 dofor j := 0 to nH - 1 do beginSaveStream.Write(wI[i, j], sizeof(wI[i, j]));SaveStream.Write(cI[i, j], sizeof(cI[i, j]));end;for j := 0 to nH - 1 dofor k := 0 to nO - 1 do beginSaveStream.Write(wO[j, k], sizeof(wO[j, k]));SaveStream.Write(cO[j, k], sizeof(cO[j, k]));end;SaveStream.SaveToFile(FileName);SaveStream.Free;end;procedure TGraphicBpnn.LoadFromFile(FileName: string); vari, j, k: longint;ReadStream: TMemoryStream;beginReadStream := TMemoryStream.Create;ReadStream.LoadFromFile(FileName);ReadStream.Seek(0, 0);for i := 0 to nI - 1 dofor j := 0 to nH - 1 do beginReadStream.Read(wI[i, j], sizeof(wI[i, j]));ReadStream.Read(cI[i, j], sizeof(cI[i, j]));end;for j := 0 to nH - 1 dofor k := 0 to nO - 1 do beginReadStream.Read(wO[j, k], sizeof(wO[j, k]));ReadStream.Read(cO[j, k], sizeof(cO[j, k]));end;ReadStream.Free;end;function TGraphicBpnn.Predict(Ins: TSingleExtendedArray): extended; begintryPredict := Update(Ins);exceptPredict := 0;end;end;function TGraphicBpnn.Test: extended;varPreRet: extended;i, Counts, Ret: longint;beginCounts := 0;for i := 0 to TestCounts - 1 do beginPreRet := Predict(TestSet[i].Ins);if PreRet > 0.5 then Ret := 1 else Ret := 0;if Ret = TestSet[i].Outs[0] then Inc(Counts);end;Result := Counts / TestCounts;end;destructor TGraphicBpnn.Destroy;beginsetlength(aI, 0);setlength(aH, 0);setlength(aO, 0);setlength(Output_Deltas, 0);setlength(Hidden_Deltas, 0);setlength(wI, 0, 0);setlength(wO, 0, 0);setlength(cI, 0, 0);setlength(cO, 0, 0);setlength(Connections, 0, 0); setlength(Samples, 0); inherited;end;。

相关文档
最新文档