人工神经网络实验指导
- 格式:doc
- 大小:583.50 KB
- 文档页数:22
学号:北京工商大学人工神经网络实验报告实验一基于BP算法的XX及Matlab实现院(系)专业学生姓名成绩指导教师2011年10月一、 实验目的:1、 熟悉MATLAB 中神经网络工具箱的使用方法;2、了解BP 神经网络各种优化算法的原理;3、掌握BP 神经网络各种优化算法的特点;4、掌握使用BP 神经网络各种优化算法解决实际问题的方法。
二、实验内容:1 案例背景1.1 BP 神经网络概述BP 神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。
在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。
每一层的神经元状态只影响下一层神经元状态。
如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP 神经网络预测输出不断逼近期望输出。
BP 神经网络的拓扑结构如图1.1所示。
图1.1 BP 神经网络拓扑结构图图1.1中1x ,2x , ……n x 是BP 神经网络的输入值1y ,2y , ……n y 是BP 神经的预测值,ij ω和jk ω为BP 神经网络权值。
从图1.1可以看出,BP 神经网络可以看成一个非线性函数,网络输入值和预测值分别为该函数的自变量和因变量。
当输入节点数为n ,输出节点数为m 时,BP 神经网络就表达了从n 个自变量到m 个因变量的函数映射关系。
BP 神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。
BP 神经网络的训练过程包括以下几个步骤。
步骤1:网络初始化。
根据系统输入输出序列()y x ,确定网络输入层节点数n 、隐含层节点数l ,输出层节点数m ,初始化输入层、隐含层和输出层神经元之间的连接权值ij ω和jk ω,初始化隐含层阈值a ,输出层阈值b ,给定学习速率和神经元激励函数。
步骤2:隐含层输出计算。
根据输入向量x ,输入层和隐含层间连接权值ij ω以及隐含层阈值a ,计算隐含层输出H 。
式中, l 为隐含层节点数; f 为隐含层激励函数,该函数有多种表达形式,本章所选函数为:步骤3:输出层输出计算。
2014--人工智能应用技术实验报告-人工神经网络程序设计2014--人工智能应用技术实验报告-人工神经网络程序设计实验报告课程名称人工智能应用技术实验项目人工神经网络程序设计实验仪器WindowsXP、Visual C++ 学院信息管理学院专业信息安全班级/学号信安1401 学生姓名Cony 实验日期2016-5-10 成绩指导教师赵刚北京信息科技大学信息管理学院(课程上机)实验报告实验课程名称:人工智能应用技术专业: 信息安全班级: 学号: 姓名: 实验名称人工神经网络程序设计实验地点学院机房实验时间5/10 1—4节1. 实验目的:l 掌握基本神经网络的常用学习规则l 掌握人工神经网络的训练过程2. 实验内容:l 相关知识:基本神经网络(感知器,前馈网络)的常用学习规则l 实验环境:Windows XP, Visual studio l 主要内容:人工神经网络的程序设计与实现 3. 实验要求:l 完成神经网络学习程序的调试,课堂演示程序执行结果l 输出神经网络权值调整过程值,分析结果数据,绘制神经网络l 提交实验报告4. 实验准备:掌握感知器学习算法①初始化:将权值向量赋予随机值,t=0(迭代次数) ②连接权的修正:对每个输入样本xk及期望输出dk完成如下计算 a. 计算网络输出:y = f(S),其中S =∑wixi,f为激活函数b. 计算输出层单元期望输出dk与实际输出y间的误差:ek = dk - y c. 若ek为零,则说明当前样本输出正确,不必更新权值,否则更新权值:w(t+1) = w(t) + α×ek ×xk t = t + 1 0 #include “stdafx.h“ #define MAX_ITERATIONS1000 #define INPUT_NEURONS2 #define NUM_WEIGHTS(INPUT_NEURONS+1) #define ALPHA(double)0.2 double weights[NUM_WEIGHTS]; typedef struct { double a; double b; double expected; } training_data_t; #define MAX_TESTS4 training_data_t training_set[MAX_TESTS]={ {-1.0, -1.0, -1.0}, {-1.0, 1.0, 1.0}, { 1.0, -1.0, 1.0}, { 1.0, 1.0, 1.0} }; double compute( int test ) { double result; /* Equation 10.2 */ result = ((training_set[test].a * weights[0]) + (training_set[test].b * weights[1]) + (1.0 * weights[2]) ); if (result > 0.0) result = 1.0; else result = -1.0; return result; } int main() { int i, test; double output; int change; /* Initialize the weights for the perceptron */ for ( i = 0 ; i #include #include “maths.c“ #include“rand.h“ #defineINPUT_NEURONS35 #define HIDDEN_NEURONS10 #define OUTPUT_NEURONS10 double inputs[INPUT_NEURONS+1]; double hidden[HIDDEN_NEURONS+1]; double outputs[OUTPUT_NEURONS]; #define RHO(double)0.1 double w_h_i[HIDDEN_NEURONS][INPUT_NEURONS+1]; doublew_o_h[OUTPUT_NEURONS][HIDDEN_NEURONS+1];#define RAND_WEIGHT(((double)rand() / (double)RAND_MAX) - 0.5) #define IMAGE_SIZE35 typedef struct test_images_s { int image[IMAGE_SIZE]; int output[OUTPUT_NEURONS]; } test_image_t; #define MAX_TESTS10 test_image_t tests[MAX_TESTS] = { { { 0,1,1,1,0, // 0 1,0,0,0,1, 1,0,0,0,1, 1,0,0,0,1, 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0,0,1,0,0, // 1 0,1,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0,1,1,1,0, // 2 1,0,0,0,1, 0,0,0,0,1, 0,0,1,1,0, 0,1,0,0,0, 1,0,0,0,0, 1,1,1,1,1 }, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0,1,1,1,0, // 3 1,0,0,0,1, 0,0,0,0,1, 0,0,1,1,0, 0,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, { { 0,0,0,1,0, // 4 0,0,1,1,0, 0,1,0,1,0, 1,1,1,1,1, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0 }, { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } },{ { 1,1,1,1,1, // 5 1,0,0,0,0, 1,0,0,0,0, 1,1,1,1,0, 0,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0 }, { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, { { 0,1,1,1,0, // 6 1,0,0,0,0, 1,0,0,0,0, 1,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0 }, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, { { 1,1,1,1,1, // 7 1,0,0,0,1, 0,0,0,0,1, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 0,1,0,0,0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, { { 0,1,1,1,0, // 8 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, { { 0,1,1,1,0, // 9 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,1, 0,0,0,0,1, 0,0,0,1,0, 0,1,1,0,0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } } }; void init_network( void ) { int i, j; /* Set the input bias */ inputs[INPUT_NEURONS] = 1.0; /* Set the hidden bias */ hidden[HIDDEN_NEURONS] = 1.0; /* Initialize the input->hidden weights */ for (j = 0 ; j max) { max = outputs[i]; best = i; } } return best; } int main( void ) { double mse, noise_prob; int test, i, j; RANDINIT(); init_network(); do { /* Pick a test at random */ test = RANDMAX(MAX_TESTS); /* Grab input image (with no noise) */ set_network_inputs( test, 0.0 ); /* Feed this data set forward */ feed_forward(); /* Backpropagate the error */ backpropagate_error( test ); /* Calculate the current MSE */ mse = calculate_mse( test ); } while (mse > 0.001); /* Now, let s test the network with increasing amounts of noise */ test =RANDMAX(MAX_TESTS); /* Start with 5% noise probability, end with 25% (per pixel) */ noise_prob = 0.05; for (i = 0 ; i (实验结果及分析)通过人工神经程序设计的学习,我进一步了解了感知器和神经网络算法,包括期望值的调整等内容,同时更加熟练地使用c语言进行程序设计,对程序设计中遇到的各种问题渐渐地有了自己的认识和解决方案。
北京信息科技大学自编实验讲义神经网络实验指导书许晓飞陈雯柏编著自动化学院智能科学与技术系2013年1月<<BP神经网络>>实验指导实验目的:(1)熟悉Matlab/Simulink的使用.(2)掌握BP神经网络的基本原理和基本的设计步骤.(3)了解BP神经网络在实际中的应用.(4)针对简单的实际系统, 能够建立BP神经网络控制模型.实验原理:1.前馈型人工神经网络前馈型人工神经网络是整个神经网络体系中最常见的一种,其结构模型如图2所示。
网络结构包含输入层、隐层(可能是多层)和输出层,它的连接方式是同层之间不相连接,相邻层之间单元为全连接型。
这种网络没有反馈存在,实际运行是单向的,学习方式是一种监督式学习。
前馈型神经网络具有很强的非线性映射能力,寻找其映射是靠学习实践的,只要学习数据足够完备,就能够描述任意未知的复杂系统。
因此前馈神经网络为非线性系统的建模和控制提供了有力的工具。
输入层隐层输出层图1 前馈型神经网络结构2.BP算法原理BP(Back Propagation)神经网络是一种利用误差反向传播训练算法的前馈型网络,BP 学习算法实质是求取网络总误差函数的最小值问题[2]。
这种算法采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数,它是梯度下降法在多层前馈网络中的应用。
具体学习算法包括两大过程,其一是输入信号的正向传播过程,其二是输出误差信号的反向传播过程。
1.正向传播输入的样本从输入层经过隐层单元一层一层进行处理,通过所有的隐层之后,则传向输出层;在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。
在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。
2.反向传播反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。
网络各层的权值改变量,则由传播到该层的误差大小来决定。
人工神经网络实验报告
本实验旨在探索人工神经网络在模式识别和分类任务中的应用效果。
实验设置包括构建神经网络模型、数据预处理、训练网络以及评估网
络性能等步骤。
首先,我们选择了一个经典的手写数字识别任务作为实验对象。
该
数据集包含了大量手写数字的灰度图片,我们的目标是通过构建人工
神经网络模型来实现对这些数字的自动识别。
数据预处理阶段包括了对输入特征的标准化处理、数据集的划分以
及对标签的独热编码等操作。
通过对原始数据进行预处理,可以更好
地训练神经网络模型,提高模型的泛化能力。
接着,我们构建了一个多层感知机神经网络模型,包括输入层、隐
藏层和输出层。
通过选择合适的激活函数、损失函数以及优化算法,
我们逐步训练网络,并不断调整模型参数,使得模型在训练集上达到
较高的准确率。
在模型训练完成后,我们对网络性能进行了评估。
通过在测试集上
进行预测,计算模型的准确率、精确率、召回率以及F1-score等指标,来全面评估人工神经网络在手写数字识别任务上的表现。
实验结果表明,我们构建的人工神经网络模型在手写数字识别任务
中表现出色,准确率高达95%以上,具有较高的识别准确性和泛化能力。
这进一步验证了人工神经网络在模式识别任务中的强大潜力,展
示了其在实际应用中的广阔前景。
总之,本次实验通过人工神经网络的构建和训练,成功实现了对手写数字的自动识别,为人工智能技术在图像识别领域的应用提供了有力支持。
希望通过本实验的研究,可以进一步推动人工神经网络技术的发展,为实现人工智能的智能化应用做出更大的贡献。
BP神经网络设计指导书一、实验目的1. 熟悉神经网络的特征、结构以及学习算法2. 了解神经网络的结构对控制效果的影响3. 掌握用MATLAB实现神经网络控制系统仿真的方法。
二、实验原理人工神经网络ANN(Artificial Neural Network)系统由于具有信息的分布存储、并行处理以及自学习能力等优点,已经在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。
尤其是基于误差反向传播(Back Propagation) 算法的多层前馈网络(Muhiple-LayerFeedforward Network),即BP网络,可以以任意精度逼近任意连续函数,所以广泛地应用于非线性建模、函数逼近和模式分类等方面。
1.BP网络算法实现BP算法属于delta算法,是一种监督式的学习算法。
其主要思想是:对于M个输人学习样本,已知与其对应的输出样本。
学习的目的是用网络的实际输出与目标矢量之间的误差来修改其权值,使实际与期望尽可能地接近,即使网络输出层的误差平方和达到最小,他是通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐逼近目标的。
每一次权值和偏差的变化都与网络误差的影响成正比,并以反向传播的方式传递到每一层。
2.BP网络的设计在MATLAB神经网络工具箱中.有很方便的构建神经网络的函数。
对于BP网络的实现.其提供了四个基本函数:newff,init.train和sim.它们分别对应四个基本步骤.即新建、初始化、训练和仿真(1)初始化前向网络初始化是对连接权值和阈值进行初始化。
initff函数在建立网络对象的同时,自动调用初始化函数,根据缺省的参数对网络的连接权值和阈值进行初始化。
格式:[wl,bl,w2,b2]=initff(p,sl,fl,s2,f2)其中P表示输入矢量,s表示神经元个数,f表示传递函数,W表示权值,b表示阈值。
(2)训练网络BP网络初始化以后,就可对之进行训练了。
BP神经网络实验报告一、引言BP神经网络是一种常见的人工神经网络模型,其基本原理是通过将输入数据通过多层神经元进行加权计算并经过非线性激活函数的作用,输出结果达到预测或分类的目标。
本实验旨在探究BP神经网络的基本原理和应用,以及对其进行实验验证。
二、实验方法1.数据集准备本次实验选取了一个包含1000个样本的分类数据集,每个样本有12个特征。
将数据集进行标准化处理,以提高神经网络的收敛速度和精度。
2.神经网络的搭建3.参数的初始化对神经网络的权重和偏置进行初始化,常用的初始化方法有随机初始化和Xavier初始化。
本实验采用Xavier初始化方法。
4.前向传播将标准化后的数据输入到神经网络中,在神经网络的每一层进行加权计算和激活函数的作用,传递给下一层进行计算。
5.反向传播根据预测结果与实际结果的差异,通过计算损失函数对神经网络的权重和偏置进行调整。
使用梯度下降算法对参数进行优化,减小损失函数的值。
6.模型评估与验证将训练好的模型应用于测试集,计算准确率、精确率、召回率和F1-score等指标进行模型评估。
三、实验结果与分析将数据集按照7:3的比例划分为训练集和测试集,分别进行模型训练和验证。
经过10次训练迭代后,模型在测试集上的准确率稳定在90%以上,证明了BP神经网络在本实验中的有效性和鲁棒性。
通过调整隐藏层结点个数和迭代次数进行模型性能优化实验,可以发现隐藏层结点个数对模型性能的影响较大。
随着隐藏层结点个数的增加,模型在训练集上的拟合效果逐渐提升,但过多的结点数会导致模型的复杂度过高,容易出现过拟合现象。
因此,选择合适的隐藏层结点个数是模型性能优化的关键。
此外,迭代次数对模型性能也有影响。
随着迭代次数的增加,模型在训练集上的拟合效果逐渐提高,但过多的迭代次数也会导致模型过度拟合。
因此,需要选择合适的迭代次数,使模型在训练集上有好的拟合效果的同时,避免过度拟合。
四、实验总结本实验通过搭建BP神经网络模型,对分类数据集进行预测和分类。
一、实验背景随着人工智能技术的飞速发展,神经网络作为一种强大的机器学习模型,在各个领域得到了广泛应用。
为了更好地理解神经网络的原理和应用,我们进行了一系列的实训实验。
本报告将详细记录实验过程、结果和分析。
二、实验目的1. 理解神经网络的原理和结构。
2. 掌握神经网络的训练和测试方法。
3. 分析不同神经网络模型在特定任务上的性能差异。
三、实验内容1. 实验一:BP神经网络(1)实验目的:掌握BP神经网络的原理和实现方法,并在手写数字识别任务上应用。
(2)实验内容:- 使用Python编程实现BP神经网络。
- 使用MNIST数据集进行手写数字识别。
- 分析不同学习率、隐层神经元个数对网络性能的影响。
(3)实验结果:- 在MNIST数据集上,网络在训练集上的准确率达到98%以上。
- 通过调整学习率和隐层神经元个数,可以进一步提高网络性能。
2. 实验二:卷积神经网络(CNN)(1)实验目的:掌握CNN的原理和实现方法,并在图像分类任务上应用。
(2)实验内容:- 使用Python编程实现CNN。
- 使用CIFAR-10数据集进行图像分类。
- 分析不同卷积核大小、池化层大小对网络性能的影响。
(3)实验结果:- 在CIFAR-10数据集上,网络在训练集上的准确率达到80%以上。
- 通过调整卷积核大小和池化层大小,可以进一步提高网络性能。
3. 实验三:循环神经网络(RNN)(1)实验目的:掌握RNN的原理和实现方法,并在时间序列预测任务上应用。
(2)实验内容:- 使用Python编程实现RNN。
- 使用Stock数据集进行时间序列预测。
- 分析不同隐层神经元个数、学习率对网络性能的影响。
(3)实验结果:- 在Stock数据集上,网络在训练集上的预测准确率达到80%以上。
- 通过调整隐层神经元个数和学习率,可以进一步提高网络性能。
四、实验分析1. BP神经网络:BP神经网络是一种前向传播和反向传播相结合的神经网络,适用于回归和分类问题。
实验课程名称:计算机在材料科学与工程中的应用2)用MATLAB中的人工神经网络方法对材料组成与性能数据进行分析和建模。
题目1:设计一个BP人工神经网络,使其与非线性函数1+sin(k*pi/4*p)逼近,其中k为函数频率系数,p为时间坐标向量,取p=[-1:0.05:8]。
要求:A)当频率系数k=1时,分析设计bp神经网络结构,包括网络的层数、的个数、传递函数。
B)进行bp神经网络的编程,构建网络、训练网络和仿真,绘制神经网络输出的逼近曲线图。
计算机实现过程:① 初始化:对所有连接权和阈值赋以随机任意小值;)0;,...,1;,...,1;,...,2()()(1====-t p j p i m k t t w k k k i k ij ,,θ② 从N 组输入输出样本中取一组样本:x (1)=[x1,…, xp1]T, d (1) =[d1,…,dpm ]T, 把输入信息 x (1) =[x1,…, xp1]T 输入BP 网络中 ③ 正向传播:计算各层节点的输出),...,1,...,2(k ki p i m k y ==;分析:产生副作用,训练后网络输出结果拟合精度不够。
分析:训练曲线达不到,由于初始值不定,误差进入梯度误差局部最小曲面。
分析:训练曲线达到要求分析:训练曲线未达到目标,需要调整神经网络结构参数分析:达到目标,且连续运行多次,均达到要求,此神经元数目达到要求分析:当神经元数目过大,达到过拟合,对训练以外的数据精确度不够,泛化能力减弱当频率一定且其他参数条件不变时,隐含层神经元数增大时,得到的曲线与原始的非线性函数曲线更加接近,说明BP网络对非线性函数的逼近效果比较好。
将数据转置,随机选择5组数据为预测样本数据,其他图:。
⼈⼯神经⽹络实验指导《⼈⼯神经⽹络》实验指导北京⼯商⼤学信息⼯程学院《⼈⼯神经⽹络》课程组编写⽬录第⼀部分实验准备 (1)第1章NeuDesk软件 (2)1.1NeuDesk软件概述 (2)1.2NeuDesk软件使⽤说明 (2)1.2.1样本的输⼊ (2)第2章Matlab神经⽹络⼯具箱 (6)2.1 MATLAB 神经⽹络⼯具箱概述 (6)2.1.1神经⽹络⼯具箱的帮助和安装 (6)2.2 MATLAB 神经⽹络⼯具箱函数 (6)2.2.1 ⽹络创建函数 (6)2.2.2 ⽹络应⽤函数 (7)2.2.3 权函数 (7)2.2.4 ⽹络输⼊函数 (7)2.2.5 转移函数 (7)2.2.6 初始化函数 (8)2.2.7 性能分析函数 (8)2.2.8 学习函数 (8)2.2.9 ⾃适应函数 (8)2.2.10 训练函数 (8)2.2.11 分析函数 (8)2.2.12 绘图函数 (8)2.2.13 符号变换函数 (9)2.2.14 拓扑函数 (9)2.3 MATLAB使⽤说明 (9)2.3.1MATLAB界⾯ (9)2.3.2在MATLAB环境下运⾏程序 (9)第⼆部分实验 (13)第3章BP⽹络的设计 (14)实验3.1NeuDesk软件环境下的BP⽹络设计 (14)3.1.1试设计BP神经⽹络解决异或问题 (14)3.1.2试设计BP神经⽹络实现⾮线性函数映射。
(14)3.1.2试设计BP神经⽹络实现分类功能。
(14)实验3.2掌握NeuDesk软件环境下的BP⽹络应⽤ (15)3.2.1基于BP算法的多层前馈⽹⽤于催化剂配⽅建模 (15)第4章SOM⽹络的设计 (17)实验4.1掌握MATLAB软件环境下的SOM⽹络设计 (17)4.1.1 输出为⼀维线阵的SOM⽹络对⼆维数据进⾏聚类 (17)4.1.2输出为⼆维平⾯阵的SOM⽹络对⼆维数据进⾏聚类 (17)实验4.2掌握MATLAB软件环境下的SOM⽹络应⽤ (18)4.2.1利⽤SOM⽹络对动物属性特征映射 (18)4.2.2 SOM⽹⽤于字符排序 (19)第⼀部分实验准备第1章NeuDesk软件1.1NeuDesk软件概述NeuDesk软件是英国NCS公司推出的神经⽹络专⽤软件,它的主要特点是输⼊输出变量都采⽤电⼦表格录⼊的⽅式,⾮常直观;⽹络的设计中可以直观地看到神经元的连接以及权值的正负,⽹络经过训练以后可以储存其连接权值,便于应⽤。
实验报告人工神经网络实验报告人工神经网络实验原理:利用线性回归和神经网络建模技术分析预测。
实验题目:利用给出的葡萄酒数据集,解释获得的分析结论。
library(plspm); data(wines); wines实验要求:1、探索认识意大利葡萄酒数据集,对葡萄酒数据预处理,将其随机划分为训练集和测试集,然后创建一个线性回归模型;2、利用neuralnet包拟合神经网络模型;3、评估两个模型的优劣,如果都不理想,提出你的改进思路。
分析报告:1、线性回归模型> rm(list=ls())> gc()used (Mb) gc trigger (Mb) max used (Mb)Ncells 250340 13.4 608394 32.5 408712 21.9Vcells 498334 3.9 8388608 64.0 1606736 12.3>library(plspm)>data(wines)>wines[c(1:5),]class alcohol malic.acid ash alcalinity magnesium phenols flavanoids1 1 14.23 1.71 2.43 15.6 127 2.80 3.062 1 13.20 1.78 2.14 11.2 100 2.65 2.763 1 13.16 2.36 2.67 18.6 101 2.80 3.244 1 14.37 1.95 2.50 16.8 113 3.85 3.495 1 13.24 2.59 2.87 21.0 118 2.80 2.69nofla.phen proantho col.intens hue diluted proline1 0.28 2.29 5.64 1.04 3.92 10652 0.26 1.28 4.38 1.05 3.40 10503 0.30 2.81 5.68 1.03 3.17 11854 0.24 2.18 7.80 0.86 3.45 14805 0.39 1.82 4.32 1.04 2.93 735> data <- wines> summary(wines)class alcohol malic.acid ashMin. :1.000 Min. :11.03 Min. :0.740 Min. :1.3601st Qu.:1.000 1st Qu.:12.36 1st Qu.:1.603 1st Qu.:2.210Median :2.000 Median :13.05 Median :1.865 Median :2.360 Mean :1.938 Mean :13.00 Mean :2.336 Mean :2.3673rd Qu.:3.000 3rd Qu.:13.68 3rd Qu.:3.083 3rd Qu.:2.558Max. :3.000 Max. :14.83 Max. :5.800 Max. :3.230alcalinity magnesium phenols flavanoids Min. :10.60 Min. : 70.00 Min. :0.980 Min. :0.340 1st Qu.:17.20 1st Qu.: 88.00 1st Qu.:1.742 1st Qu.:1.205 Median :19.50 Median : 98.00 Median :2.355 Median :2.135 Mean :19.49 Mean : 99.74 Mean :2.295 Mean :2.029 3rd Qu.:21.50 3rd Qu.:107.00 3rd Qu.:2.800 3rd Qu.:2.875 Max. :30.00 Max. :162.00 Max. :3.880 Max. :5.080 nofla.phen proantho col.intens hue Min. :0.1300 Min. :0.410 Min. : 1.280 Min. :0.4800 1st Qu.:0.2700 1st Qu.:1.250 1st Qu.: 3.220 1st Qu.:0.7825 Median :0.3400 Median :1.555 Median : 4.690 Median :0.9650 Mean :0.3619 Mean :1.591 Mean : 5.058 Mean :0.9574 3rd Qu.:0.4375 3rd Qu.:1.950 3rd Qu.: 6.200 3rd Qu.:1.1200 Max. :0.6600 Max. :3.580 Max. :13.000 Max. :1.7100 diluted prolineMin. :1.270 Min. : 278.01st Qu.:1.938 1st Qu.: 500.5Median :2.780 Median : 673.5Mean :2.612 Mean : 746.93rd Qu.:3.170 3rd Qu.: 985.0Max. :4.000 Max. :1680.0Num Variable Description 解释1 class Type of wine 葡萄酒的种类2 alcohol Alcohol 醇3 malic.acid Malic acid 苹果酸4 ash Ash 灰5 alcalinity Alcalinity 碱度6 magnesium Magnesium 镁7 phenols Total phenols 酚类8 flavanoids Flavanoids 黄酮9 nofla.phen Nonflavanoid phenols 非黄烷类酚类10 proantho Proanthocyanins 花青素11 col.intens Color intensity 颜色强度12 hue Hue 色调13 diluted OD280/OD315 of diluted wines 稀释的葡萄酒14 proline Proline 脯氨酸> apply(data,2,function(x) sum(is.na(x)))class alcohol malic.acid ash alcalinity magnesium phenols 0 0 0 0 0 0 0 flavanoids nofla.phen proantho col.intens hue diluted proline 0 0 0 0 0 0 0> dim(wines)[1] 178 14> set.seed(2)> test=sample(1:nrow(wines),100)> wines.train<-wines[-test,]> wines.test<-wines[test,]> dim(wines.train);dim(wines.test)[1] 78 14[1] 100 14> lm.fit <- glm(alcohol~., data=wines.train)> summary(lm.fit)Call:glm(formula = alcohol ~ ., data = wines.train)Deviance Residuals:Min 1Q Median 3Q Max-0.98017 -0.31067 -0.00405 0.36184 1.23885Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept) 13.0661361 1.2664910 10.317 3.04e-15 ***class -0.4043994 0.2389115 -1.693 0.09538 .malic.acid 0.1612962 0.0730559 2.208 0.03085 *ash 0.2621448 0.3669235 0.714 0.47755alcalinity -0.0591380 0.0328684 -1.799 0.07670 .magnesium 0.0003567 0.0052733 0.068 0.94628phenols 0.1719659 0.2078450 0.827 0.41110flavanoids -0.1780915 0.1815817 -0.981 0.33039nofla.phen -0.4623220 0.7409499 -0.624 0.53487proantho -0.2402948 0.1449535 -1.658 0.10226col.intens 0.1580059 0.0447835 3.528 0.00078 ***hue 0.1226260 0.4205420 0.292 0.77154diluted -0.0889085 0.1967579 -0.452 0.65289proline 0.0008112 0.0003943 2.058 0.04371 *---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for gaussian family taken to be0.2968956)Null deviance: 57.473 on 77 degrees of freedomResidual deviance: 19.001 on 64 degrees of freedomAIC: 141.2Number of Fisher Scoring iterations: 2> pr.lm <- predict(lm.fit,wines.test)> MSE.lm <- sum((pr.lm - wines.test$alcohol)^2)/nrow(wines.test)> print(MSE.lm)[1] 0.30436252、神经网络模型> maxs <- apply(wines, 2, max)> mins <- apply(wines, 2, min)> scaled <- as.data.frame(scale(wines, center = mins, scale = maxs - mins))> index <- sample(1:nrow(wines),round(0.75*nrow(wines))) > train_ <- scaled[index,]> test_ <- scaled[index,]> library(neuralnet)> n <- names(train_)> f <- as.formula(paste("alcohol~", paste(n[!n %in% "alcohol"], collapse = " + ")))> nn <- neuralnet(f,data=train_,hidden=c(5,3),linear.output=T) > plot(nn)>pr.nn <- compute(nn,test_[,1:13])>pr.nn__<-pr.nn$net.result*(max(test_$alcohol)-min(test_$alcohol))+mi n(test_$alcohol)>test.r1<-(test_$alcohol)*(max(test_$alcohol)-min(test_$alcohol))+min (test_$alcohol)> MSE.nn1 <- sum((test.r1 - pr.nn__)^2)/nrow(test_)> print(paste(MSE.lm,MSE.nn1))[1] "0.304362456679839 0.14726865189892"3、模型修正>par(mfrow=c(1,2))>plot(test_$alcohol,pr.nn__,col='red',main='Real vs predicted NN',pch=18,cex=0.7)>abline(0,1,lwd=2)>legend('bottomright',legend='NN',pch=18,col='red',bty='n')>plot(wines.test$alcohol,pr.lm,col='blue',main='Real vs predictedlm',pch=18, cex=0.7) >abline(0,1,lwd=2)>legend('bottomright',legend='LM',pch=18,col='blue',bty='n', cex=0.7)0.00.40.80.00.20.40.60.81.01.2Real vs predicted NN test_$alcohol p r .n n _ _11.512.513.511.512.012.513.013.514.014.5Real vs predicted lmwines.test$alcoholp r .lm> par(mfrow=c(1,1))> plot(test_$alcohol,pr.nn__,col='red',main='Real vs predicted NN',pch=18,cex=0.7)>points(wines.test$alcohol,pr.lm,col='blue',pch=18,cex=0.7) > abline(0,1,lwd=2)>legend('bottomright',legend=c('NN','LM'),pch=18,col=c('r ed','blue'))> library(boot)> set.seed(200)> lm.fit <- glm(alcohol~.,data=data)> cv.glm(data,lm.fit,K=10)$delta[1][1] 0.3058061679>set.seed(450)>cv.error <- NULL>k <- 10>library(plyr)>pbar <- create_progress_bar('text')>pbar$init(k)>for(i in 1:k){index <- sample(1:nrow(data),round(0.9*nrow(data)))train.cv <- scaled[index,]test.cv <- scaled[-index,]nn <- neuralnet(f,data=train.cv,hidden=c(5,2),linear.output=T) pr.nn <- compute(nn,test.cv[,1:13])pr.nn__<-pr.nn$net.result*(max(test_$alcohol)-min(test_$alcohol))+min (test_$alcohol)test.cv.r <- (test.cv$alcohol)*(max(test.cv$alcohol)-min(test.cv$alcohol))+min(tes t.cv$alcohol)cv.error[i] <- sum((test.cv.r - pr.nn__)^2)/nrow(test.cv)pbar$step()}> mean(cv.error)[1] 0.06900470043> cv.error[1] 0.0791******* 0.10556665990 0.05904083258 0.0714******* 0.0992******* [6] 0.03239406600 0.048074664370.0999******* 0.0355******* 0.0596*******> par(mfrow=c(1,1))> par(mfrow=c(1,1))> boxplot(cv.error,xlab='MSE CV',col='cyan',+ border='blue',names='CV error (MSE)',+ main='CV error (MSE) for NN',horizontal=TRUE)0.040.060.080.10MSE CV> cv.error[i] [1] 0.0596547757。
《人工神经网络》实验指导北京工商大学信息工程学院《人工神经网络》课程组编写目录第一部分实验准备 (1)第1章NeuDesk软件 (2)1.1NeuDesk软件概述 (2)1.2NeuDesk软件使用说明 (2)1.2.1样本的输入 (2)第2章Matlab神经网络工具箱 (6)2.1 MATLAB 神经网络工具箱概述 (6)2.1.1神经网络工具箱的帮助和安装 (6)2.2 MATLAB 神经网络工具箱函数 (6)2.2.1 网络创建函数 (6)2.2.2 网络应用函数 (7)2.2.3 权函数 (7)2.2.4 网络输入函数 (7)2.2.5 转移函数 (7)2.2.6 初始化函数 (8)2.2.7 性能分析函数 (8)2.2.8 学习函数 (8)2.2.9 自适应函数 (8)2.2.10 训练函数 (8)2.2.11 分析函数 (8)2.2.12 绘图函数 (8)2.2.13 符号变换函数 (9)2.2.14 拓扑函数 (9)2.3 MATLAB使用说明 (9)2.3.1MATLAB界面 (9)2.3.2在MATLAB环境下运行程序 (9)第二部分实验 (13)第3章BP网络的设计 (14)实验3.1NeuDesk软件环境下的BP网络设计 (14)3.1.1试设计BP神经网络解决异或问题 (14)3.1.2试设计BP神经网络实现非线性函数映射。
(14)3.1.2试设计BP神经网络实现分类功能。
(14)实验3.2掌握NeuDesk软件环境下的BP网络应用 (15)3.2.1基于BP算法的多层前馈网用于催化剂配方建模 (15)第4章SOM网络的设计 (17)实验4.1掌握MATLAB软件环境下的SOM网络设计 (17)4.1.1 输出为一维线阵的SOM网络对二维数据进行聚类 (17)4.1.2输出为二维平面阵的SOM网络对二维数据进行聚类 (17)实验4.2掌握MATLAB软件环境下的SOM网络应用 (18)4.2.1利用SOM网络对动物属性特征映射 (18)4.2.2 SOM网用于字符排序 (19)第一部分实验准备第1章NeuDesk软件1.1NeuDesk软件概述NeuDesk软件是英国NCS公司推出的神经网络专用软件,它的主要特点是输入输出变量都采用电子表格录入的方式,非常直观;网络的设计中可以直观地看到神经元的连接以及权值的正负,网络经过训练以后可以储存其连接权值,便于应用。
1.2NeuDesk软件使用说明1.2.1样本的输入打开NeuDesk软件,出现以下界面,其中表Training Inputs是训练集的输入;Training Outputs是训练集的教师信号。
输入向量:按列输入表中,一列代表一个变量输出向量:按列输入表中,一列代表一个变量归一化处理:点击spreadsheet-----autoscale1.2.2网络的设计打开Window,选择进入网络的设计界面其中,在Edit下拉菜单中选择Randomize为随机初始化;Manual Design表示手动改变隐层数和隐层节点数;Autodesign是根据输入节点和输出节点来进行自动设计。
1.2.3网络的训练进入Control window,可以对网络的训练参数进行设计。
其中,Training Methods(训练方法):用于进行算法和参数设计Terminate Training On(中止条件):设置终止条件如最大迭代次数或者是最小误差Current Status(现在的状态):网络当前的迭代次数以及当前的误差Randomize为根据问题随机初始化网络的初始权值和隐层节点数Train:训练网络Query:用训练好的网络对新的输入来预测输出1.2.3网络的预测用训练好的网络对新的输入进行预测。
(1)在Query Inputs键入输入变量(2)点击Control Window上的Query,利用训练好的网络进行前向计算(3)可以在Query Outputs窗口得到相应的输出第2章Matlab神经网络工具箱MATLAB名字由MATrix和LABoratory 两词的前三个字母组合而成。
20世纪七十年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MA TLAB。
MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MA TLAB为平台加以重建。
在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。
在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容。
这几乎成了九十年代教科书与旧版书籍的区别性标志。
在那里,MA TLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。
MATLAB的推出得到了各个领域的专家学者的广泛关注,在此基础上,专家们相继推出了MATLAB工具箱,主要包括信号处理、控制系统、神经网络、图像处理、鲁棒控制、非线性系统控制设计、系统辨识、最优化、模糊逻辑、小波等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具。
2.1 MATLAB 神经网络工具箱概述神经网络工具箱(NN Toolbox)几乎完整地概括了现有的神经网络的新成果,所涉及的网络模型有:感知器、线性网络、BP网络、径向基网络、自组织网络和反馈网络等。
对于各种网络模型,神经网络工具箱集成了多种学习算法,为用户提供了方便。
2.1.1神经网络工具箱的帮助和安装神经网络工具箱包含在nnet目录中,键入help nnet可得到帮助主题。
工具箱包含了许多示例。
每一个例子讲述了一个问题,展示了用来解决问题的网络并给出了最后的结果。
显示向导要讨论的神经网络例子和应用代码可以通过键入help nndemos找到。
安装神经网络工具箱的指令可以在下列两份MATLAB文档中找到:the Installation Guide for MS-Windows and Macintosh 或者the Installation Guide for UNIX。
2.2 MATLAB 神经网络工具箱函数说明:下面列出的函数适用于MATLAB5.3 以上版本,为简明起见,只列出了函数名,如需要了解函数的详细说明和使用,请参阅MATLAB 的帮助文档。
2.2.1 网络创建函数newp 创建感知器网络newlind 设计一线性层newlin 创建一线性层newff 创建一前馈BP 网络newcf 创建一多层前馈BP 网络newfftd 创建一前馈输入延迟BP 网络newrb 设计一径向基网络newrbe 设计一严格的径向基网络newgrnn 设计一广义回归神经网络newpnn 设计一概率神经网络newc 创建一竞争层newsom 创建一自组织特征映射newhop 创建一Hopfield 递归网络newelm 创建一Elman 递归网络2.2.2 网络应用函数sim 仿真一个神经网络init 初始化一个神经网络adapt 神经网络的自适应化train 训练一个神经网络2.2.3 权函数dotprod 权函数的点积ddotprod 权函数点积的导数dist Euclidean 距离权函数normprod 规范点积权函数negdist Negative 距离权函数mandist Manhattan 距离权函数linkdist Link 距离权函数2.2.4 网络输入函数netsum 网络输入函数的求和dnetsum 网络输入函数求和的导数2.2.5 转移函数hardlim 硬限幅转移函数hardlims 对称硬限幅转移函数purelin 线性转移函数tansig 正切S 型转移函数logsig 对数S 型转移函数dpurelin 线性转移函数的导数dtansig 正切S 型转移函数的导数dlogsig 对数S 型转移函数的导数compet 竞争转移函数radbas 径向基转移函数satlins 对称饱和线性转移函数2.2.6 初始化函数initlay 层与层之间的网络初始化函数initwb 阈值与权值的初始化函数initzero 零权/阈值的初始化函数initnw Nguyen_Widrow 层的初始化函数initcon Conscience 阈值的初始化函数midpoint 中点权值初始化函数2.2.7 性能分析函数mae 均值绝对误差性能分析函数mse 均方差性能分析函数msereg 均方差w/reg 性能分析函数dmse 均方差性能分析函数的导数dmsereg 均方差w/reg 性能分析函数的导数2.2.8 学习函数learnp 感知器学习函数learnpn 标准感知器学习函数learnwh Widrow_Hoff 学习规则learngd BP 学习规则learngdm 带动量项的BP 学习规则learnk Kohonen 权学习函数learncon Conscience 阈值学习函数learnsom 自组织映射权学习函数2.2.9 自适应函数adaptwb 网络权与阈值的自适应函数2.2.10 训练函数trainwb 网络权与阈值的训练函数traingd 梯度下降的BP 算法训练函数traingdm 梯度下降w/动量的BP 算法训练函数traingda 梯度下降w/自适应lr 的BP 算法训练函数traingdx 梯度下降w/动量和自适应lr 的BP 算法训练函数trainlm Levenberg_Marquardt 的BP 算法训练函数trainwbl 每个训练周期用一个权值矢量或偏差矢量的训练函数2.2.11 分析函数maxlinlr 线性学习层的最大学习率errsurf 误差曲面2.2.12 绘图函数plotes 绘制误差曲面plotep 绘制权和阈值在误差曲面上的位置plotsom 绘制自组织映射图2.2.13 符号变换函数ind2vec 转换下标成为矢量vec2ind 转换矢量成为下标矢量2.2.14 拓扑函数gridtop 网络层拓扑函数hextop 六角层拓扑函数randtop 随机层拓扑函数2.3 MATLAB使用说明2.3.1MATLAB界面打开MATLAB,会出现如下操作界面:2.3.2在MATLAB环境下运行程序在MATLAB环境下运行程序可以采用如下方式:一是在命令窗口中直接键入命令行,缺点是无法进行编辑;另一个方式是将多个命令语句放入到m文件中,然后运行m文件,优点是利于编辑。