《人工智能导论》课程研究总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《人工智能导论》课程研究总结题目:BP神经网络的非线性函数拟合
班级:
姓名:
学号:
年月日
本次作业我负责程序的编写,过程如下
Matlab软件中包含Matlab神经网络工具箱。
它是以人工神经网络理论为基础,用Matlab语言构造出了该理论所涉及的公式运算、矩阵操作和方程求解等大部分子程序以用于神经网络的设计和训练。
用户只需根据自己的需要调用相关的子程序,即可以完成包括网络结构设计、权值初始化、网络训练及结果输出等在内的一系列工作,免除编写复杂庞大程序的困扰。
目前,Matlab神经网络工具包包括的网络有感知器、线性网络、BP神经网络、径向基网络、自组织网络和回归网络等。
BP神经网络主要用到newff、sim和train3个神经网络函数,各函数解释如下。
1、newff:BP神经网络参数设置函数
函数功能:构建一个BP神经网络。
函数形式:net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
P:输入数据矩阵。
T:输出数据矩阵。
S:隐含层结点数。
TF:结点传递函数,包括硬限幅传递函数hardlim,对称硬限幅传递函数hardlims,线性传递函数pureline,正切S型传递函数tansig,对数S型传递函数logsig。
BTF:训练函数,包括梯度下降BP算法训练函数traingd,动量反传的梯度下降BP算法训练函数traingdm,动态自适应学习率的梯度下降BP算法训练函数traingda,动量反传和动态自适应学习率的梯度下降BP算法训练函数traingdx,Levenberg_Marquardt的BP算法训练函数trainlm。
BLF:网络学习函数,包括BP学习规格learngd,带动量项的BP学习规则learngdm。
PF:性能分析函数,包括均值绝对误差性能分析函数mae,均方差性能分析函数mse。
IPF:输入处理函数。
OPF:输出处理函数。
DDF:验证数据划分函数。
一般在使用过程中设置前面6个参数,后面4个参数采用系统默认参数。
2、train:BP神经网络训练函数
函数功能:用训练数据训练BP神经网络。
函数形式:[net,tr] = train(NET,X,T,Pi,Ai)
NET:待训练网络。
X:输入数据。
T:输出数据。
Pi:初始化输入层条件。
Ai:初始化输出层条件。
net:训练好的网络。
tr:训练过程记录。
一般在使用过程中设置前面3个参数,后面2个参数采用系统默认参数。
3、sim:BP神经网络预测函数、
函数功能:用训练好的BP神经网络预测函数输出。
函数形式:y = sim(net,x)
net:训练好的网络。
x:输入数据。
y:网络预测数据。
程序代码:
%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%导入输入输出数据
load data input output
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);
%随机选择1900组训练数据和100组预测数据
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900));
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));
%训练数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%% BP网络训练
%初始化BP网络结构
net=newff(inputn,outputn,5);
%网络参数配置(迭代次数、学习率、目标)
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004;
%网络训练
net=train(net,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
%% 结果分析
figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;
figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')
errorsum=sum(abs(error))
感受与体会
本次课程设计使我受益匪浅,他使我更加深入的了解了硬件设计的整个流程,并且加深了我对EDA技术这门的课内容的理解,让我巩固了以前所学过的知识。
通过本次课程设计,我加深了我对VHDL语言的理解,扩充了我的知识面。
本次设计课不仅仅培养了我们的实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
本次课程设计给我提供了一个既动手又动脑、自学、独立实践的机会,也培养了我的耐心和毅力,设计中遇到不少问题,而一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,因此本次课程设计使我积累了一定的实际操作与独立自主设计的经验,相信这些经验在我以后的学习和工作中会有很大的作用。