还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
nnToolKit用户操作手册(VC++
6.0环境下调用)用户操作手册信息软件名称VC环境下调用nnToolKit工具包软件版本号
1.01序言
1.1软件概述nnToolKit 神经网络工具包是2NSOFT 依托 MATLAB 神经网络工具箱自行开发的一组神经网络算法函数库,并打包成DLL组件,这些组件作为独立的COM对象,可以直接被Visual Basic、Visual C++ 或其它支持COM的高级语言所引用算法包括BP算法Levenberg-Marquardt动量项法,自组织特征映射SOM,回归网络,径向基函数等
1.2定义,缩写及术语条目描述/解释L-M动量法即Levenberg-Marquardt动量项法,它是一种优化方法基础上的训练算法,该算法具有训练速度快,学习时间短的特点,但对计算机性能要求比较高COMBuilderMATLAB提供的COM生成器,它能把MATLAB开发的算法做成组件,这些组件作为独立的COM对象,可以直接被Visual Basic、Visual C++ 或其它支持COM的高级语言所引用
1.3联系我们感谢您选择广州万友人工智能软件有限公司的软件产品,在系统的安装和使用过程中如果遇到问题,请填写附录中的问题报告表格,通过如下的方式与我们联系,我们将为您提供周到满意的服务主页http://www.2nsoft.com.cn电话传真Email service@2nsoft.com通信地址2操作说明
2.1工具包函数
1、LmTrainModelNoNetParaTrainParaInputFunOutputFunDataDir描述Levenberg-Marquardt动量项法神经网络训练函数
2、LmSimuModelNoNetParaSimulateParaInputFunOutputFunDataDir描述Levenberg-Marquardt动量项法神经网络仿真函数
3、PtrnTrainModelNoNetParaTrainParaInputFunOutputFunDataDir描述基于L-M算法的模式识别神经网络训练函数
4、PtrnSimuModelNoNetParaSimulateParaInputFunOutputFunDataDir描述引入了竞争层的神经网络仿真函数
5、SofmTrainModelNoNetParaTrainParaDataDir描述自组织特征映射模型SOM网络训练函数,一种无教师的聚类算法
6、SofmSimuModelNoNetParaSimuDataDataDir描述自组织特征映射模型SOM网络仿真函数,实现自动分类
7、FitSimuModelNoNetParaSeqDataTargetDataDataDir描述基于最小二乘多项式曲线插值函数
8、FitPolyModelNoNetParaSeqDataTargetDataDataDir描述基于最小二乘多项式曲线拟合函数
9、FitForecastModelNoInputDataDataDir描述时序数据预测函数
10、FitDrawpicModelNoNetParaSeqDataTargetDataDataDir描述数据图形显示函数
2.2使用说明LmNetPF神经网络通用平台用到Levenberg-Marquardt算法,该算法在工具包中主要提供了两个函数LmTrain和LmSimu函数,分别对应神经网络训练和仿真操作,下面将针对具体案例,详细介绍其使用方法
2.
2.1I/O接口样本数据的传输在动态链接库(即工具包函数)与高级编程语言之间主要是通过文本文件,Excel和数据库方式进行交互通讯的,在此仅介绍文本文件的传输方式(下载的版本仅支持此类型,需要其它类型的用户请与公司联系)这里的文件包括样本输入数据文件和样本输出数据文件,它是用户在高级编程语言中对专家样本数据经归一化处理后的结果,数据中间用空格分开1归一化后的专家样本输入数据文件input_para.txt,其中“”表示模型编号文件中一般一组数据放在一行,如一个有七个输入单元的网络,其数据格式如下所示
0.
8900.
9230.
2330.
7330.
5760.
4670.
6450.
8850.
9210.
3450.
7120.
6640.
4530.
6560.
8840.
9120.
3870.
6920.
6790.
3220.
6400.
8620.
9380.
4210.
6690.
7230.
3120.
6230.
7930.
9460.
4780.
6230.
7340.
3050.
5980.
7480.
9510.
4980.
5890.
7760.
2840.
5890.
7380.
9670.
5230.
5340.
8120.
2640.
4720.
6450.
9770.
5540.
4980.
8450.
2460.
4210.
6220.
9820.
5920.
4560.
8960.
2130.
3890.
5980.
9860.
6080.
4550.
9760.
1780.376行数表示样本个数,上面表示十个样本数据2归一化后的专家样本目标数据文件output_para.txt,其中“”表示模型编号文件中一般一组数据放在一行,如一个有一个输出单元的网络,其数据格式如下所示
0.
7330.
7120.
6920.
6690.
6230.
5890.
5340.
4980.
4560.455行数表示样本个数,上面表示十个样本数据使用时注意输入和输出的样本个数要求一致3保存神经网络结构的权域值文件w
1.dat;w
2.dat;b
1.dat;b
2.dat其中“”表示模型编号由于任一一个多层的神经网络结构,都可以通过调整隐层单元个数,由一个三层的神经网络结构来实现故提供的组件中只包含三层的神经网络,用户可以通过调整隐层单元个数,来实现复杂的网络结构需要w
1.dat;b
1.dat代表输入层到中间层的权域值文件;w
2.dat;b
2.dat代表中层到输出层的权域值文件
2.
2.2接口参数
1、神经网络训练函数LmTrainModelNoNetParaTrainParaInputFunOutputFunDataDir描述根据专家样本数据和网络参数,寻找神经网络输入输出项之间的内在关系参数说明1ModelNo模型编号,针对一个工程应用,允许同时建立多个神经网络模型;2NetPara神经网络参数;参数名称参数说明默认值NetPara1输入层节点数实际网络的输入层节点数NetPara2输出层节点数实际网络的输出层节点数NetPara3中间层节点数实际网络的中间层节点数NetPara4训练数据组数实际专家样本数据的组数3TrainPara神经网络可选训练参数,其作用是设定如何进行训练,当采用默认值时,参数指定为-1;参数名称参数说明默认值TrainPara1显示间隔次数25TrainPara2最大循环次数1000TrainPara3目标误差
0.02TrainPara4设置最小梯度
0.001TrainPara5设定μ的初始值
0.001TrainPara6设定μ的增加系数10TrainPara7设定μ的减少系数
0.1TrainPara8设定μ的最大值1e104InputFun输入层到中间层的传递函数,默认值为tansig,当采用默认值时,参数指定为-1;5OutputFun中间层到输出层的传递函数,默认值为purelin,当采用默认值时,参数指定为-1;6DataDir神经网络工程应用所在的工作路径(即模型参数,样本数据文件存放路径),如果为空,表示当前应用程序所在的路径
2、神经网络仿真函数LmSimuModelNoNetParaSimulateParaInputFunOutputFunDataDir描述基于训练好的神经网络模型,输入样本,计算出结果参数说明1ModelNo模型编号,针对一个工程应用,允许同时建立多个神经网络模型;2NetPara神经网络参数;参数名称参数说明默认值NetPara1输入层节点数实际网络的输入层节点数NetPara2输出层节点数实际网络的输出层节点数NetPara3中间层节点数实际网络的中间层节点数3SimulatePara神经网络仿真时的实际输入参数;4InputFun输入层到中间层的传递函数,默认值为tansig,当采用默认值时,参数指定为-1;5OutputFun中间层到输出层的传递函数,默认值为purelin,当采用默认值时,参数指定为-1;6DataDir神经网络工程应用所在的工作路径(即模型参数,样本数据文件存放路径),如果为空,表示当前应用程序所在的路径3在VC++
6.0中调用nnToolKit工具包应用示例
3.1将nnToolKit动态库导入VC
1、安装和注册nnToolKit组件参见神经网络组件《nnToolKit安装手册》
2、导入nnToolKit组件新建一个MFCAppWizard[exe]工程后,导入nnToolKit使用MFCClassWizard添加一个新类,选择Fromatypeoflibrary在弹出的对话框中选中nnToolKit.dll确定后,可以在workspace中发现类InnToolKit本例中采用自动化方法来使用COM,如果在创建本程序中没有选择AUTOMATION选项,并希望在应用程序的任何地方都能接触到COM,则应该在应用程序类的InitInstance函数的开始的地方调用函数AfxOleInit;代码如下if!AfxOleInit{AfxMessageBoxOLE初始化失败;returnFALSE;}并在#includestdafx.h之后添加#includeafxole.h
3.2调用nnToolKitDLL构建应用程序
1、新建项目1新建一个MFCAppWizard[exe]工程,lm新建一个单文档程序
2、将nnToolKit导入VC操作步骤如3所讲
3、程序设计神经网络训练窗体设计如下主要有两个对话框,网络训练和网络仿真通过菜单“操作”项启动网络训练对话框设计如下 网络仿真对话框设计如下
4、调用说明主要操作步骤变量类型的转换(参见源代码)初始化COM件if!nn.CreateDispatchnnToolKit.nnToolKit.1_0{MessageBox没有联结;exit-1;}调用COM件中的方法nn.lmsimu1retModelNonpspinfunoutfundirname;释放COM件nn.ReleaseDispatch;使用计算后返回的结果doubleresult=ret.dblVal;m_outpre.Format%fresult;MessageBox仿真成功;网络训练部分代码voidCTDlg::OnTrain{//TODO:Addyourcontrolnotificationhandlercodehere//获取网络参数UpdateDataTRUE;doublen
[4];n
[0]=m_numinputt;n
[2]=m_nummiddlet;n
[1]=m_numoutputt;n
[3]=m_numdata;COleVariantnp;np.vt=VT_R8|VT_ARRAY;SAFEARRAYBOUNDnpbound
[1]={40};np.parray=SafeArrayCreateVT_R81npbound;np.parray-pvData=n;//获取训练参数doublet
[8];t
[0]=atofm_trainp1;t
[1]=atofm_trainp2;t
[2]=atofm_trainp3;t
[3]=atofm_trainp4;t
[4]=atofm_trainp5;t
[5]=atofm_trainp6;t
[6]=atofm_trainp7;t
[7]=atofm_trainp8;COleVarianttp;tp.vt=VT_R8|VT_ARRAY;SAFEARRAYBOUNDtpbound
[1]={80};tp.parray=SafeArrayCreateVT_R81tpbound;tp.parray-pvData=t;//函数类型intcuritem=m_funint.GetCurSel;CStringfunin;ifcuritem==0funin=logsig;elseifcuritem==1funin=tansig;elseifcuritem==2funin=purelin;COleVariantinfun=funin;CStringfunout;curitem=m_funoutt.GetCurSel;ifcuritem==0funout=tansig;elseifcuritem==1funout=purelin;elseifcuritem==2funout=logsig;COleVariantoutfun=funout;//模型名和目录COleVariantModelNo=1;COleVariantdirname=dir;//输出设置COleVariantret;//调用nnToolKitCSDlgd;if!d.nn.CreateDispatchnnToolKit.nnToolKit.1_0{MessageBox没有联结;exit-1;}d.nn.lmtrain1retModelNonptpinfunoutfundirname;d.nn.ReleaseDispatch;doubleresult=ret.dblVal;CStringstr;str.Format网络训练成功,训练%f次result;MessageBoxstr;} 网络仿真部分代码 voidCSDlg::OnSimu{//TODO:Addyourcommandhandlercodehere//输入输出节点数;doublen
[3];n
[0]=m_numinput;n
[1]=m_numoutput;n
[2]=m_nummiddle;COleVariantnp;np.vt=VT_R8|VT_ARRAY;SAFEARRAYBOUNDnpbound
[1]={30};np.parray=SafeArrayCreateVT_R81npbound;np.parray-pvData=n;//函数类型intcuritem=m_funin.GetCurSel;CStringfunin;ifcuritem==0funin=logsig;elseifcuritem==1funin=tansig;elseifcuritem==2funin=purelin;COleVariantinfun=funin;CStringfunout;curitem=m_funout.GetCurSel;ifcuritem==0funout=tansig;elseifcuritem==1funout=purelin;elseifcuritem==2funout=logsig;COleVariantoutfun=funout;//模型名和目录COleVariantModelNo=1;CStringdir;GetModuleFileNameNULLdir.GetBuffer100100;dir.ReleaseBuffer;dir.TrimRight;dir=dir.Leftdir.GetLength-6+demo;COleVariantdirname=dir;//预测数据//检测长度intnumpre=m_list.GetItemCount;ifnumpre!=m_numinput{MessageBox输入预测数据的个数不对,确认;return;}doubles
[7];forinti=0;inumpre;i++s[i]=atofm_list.GetItemTexti1;COleVariantsp;sp.vt=VT_R8|VT_ARRAY;SAFEARRAYBOUNDspbound
[1]={70};sp.parray=SafeArrayCreateVT_R81spbound;sp.parray-pvData=s;//输出设置COleVariantret;//调用NNTOOLKITif!nn.CreateDispatchnnToolKit.nnToolKit.1_0{MessageBox没有联结;exit-1;}nn.lmsimu1retModelNonpspinfunoutfundirname;nn.ReleaseDispatch;doubleresult=ret.dblVal;m_outpre.Format%fresult;MessageBox仿真成功;}具体代码请用户详见配套源程序
5、使用说明和文件说明本示范主要是说明在VC下如何使用nnToolKit.程序中包含如下几个文件,下面以演示程序为例加以说明1归一化处理后的训练样本输入文件,此例中为input_para
1.txt说明文件名称不能随意更改,这里“1“表示模型编号,在实际应用中,用户可定义多个网络模型,该值可通过变量来设置,另外,这里的样本文件是经归一化处理后的结果文件,在实际应用中,用户需对实际样本数据进行处理后得到2归一化处理后的训练样本输出文件,此例中为output_para
1.txt说明同上3神经网络模型经过训练后保存下来的权域值文件此例由于模型编号为“1”,故相应文件名为w
11.dat;w
12.dat;b
11.dat;b
12.dat由于任一一个多层的神经网络结构,都可以通过调整隐层单元个数,由一个三层的神经网络结构来实现故提供的组件中只包含三层的神经网络,用户可以通过调整隐层单元个数,来实现复杂的网络结构需要w
11.dat;b
11.dat代表输入层到中间层的权域值文件;w
12.dat;b
12.dat代表中层到输出层的权域值文件
(4)均方误差文件lm_err
1.dat,这里“1”表示模型编号为1
(5)预测结果文件result
1.dat,这里“1”表示模型编号为14常见问题解答FAQ
1、安装nnToolKit神经网络工具包时报错,即出现异常安装时如果出现异常,请从以下几个方面检查原因
①以前是否已安装过nnToolKit神经网络工具包?若是,请先手工删除掉相应文件夹及下面内容;
②指定的安装路径中包含有汉字?若是,请去掉汉字;
③安装路径名是否太长?若是,请缩短;
④多次安装工具包时未能将以前的应用删除掉从而导致如果是这种情况,请将以前的安装过程中产生的相应文件夹(bin及toolbox)及文件删除掉,再重新安装工具包,安装过程中最好选择默认安装。