%===============自定义空网络 包括1个输入,1层==================
net=network;
net.numInputs=1; %输入矢量的个数。
net.numLayers=1; %层数
%===============整体设计,包括各层是否有阀值、各层与输入层的连接情况、各层(不含输入层下同)之间的连接,各层输出是否有目标矢%量,==================
net.biasConnect=[1]; %第一层有阀值。
net.inputConnect=[1]; %第一层都要接收第一个输入矢量,第一层接受第二个输入矢量。
net.layerConnect=[0 ]; %[0 1;0 0]与[0 0 ;1 0]是一样的。第一层和第一层不连,第一层和第二层不连,第二层和第一层连
net.targetConnect=[1]; %第 1 层神经元产生的输出具有目标矢量
net.outputConnect=[1]; %表示第 1 层神经元产生网络的输出
%================定义输入层(本例只有一个输入,但size为2,是因为还有个输入是阀值输入。range含两个矢量同理=================
net.inputs{1}.size=2; %定义输入矢量的维数。
net.inputs{1}.range=[-1 1; -1 1 ]; %输入层的输入范围。第一个输入为阀值范围[-1 -1],
%======1==========定义第一层的神经元数,第一层的拓扑函数,初始化函数,净输入求和函数,转移函数=================
net.layers{1}.size=2;
net.layers{1}.dimensions=[2 1]; %该属性定义每层神经元在多维空间中排列时各维的维数也可为net.layers{1}.dimensions=[1 2];
net.layers{1}.topologyFcn='hextop'; %该属性定义了每层神经元在多维空间中分布的拓扑函数
net.layers{1}.initFcn='initwb';
net.layers{1}.netInputFcn='netsum';
net.layers{1}.transferFcn='hardlim';
%======1===========定义第一层的阀值初始化函数,学习时是否调整阀值,阀值学习函数====================
net.biases{1}.initFcn='initzero'; %阀值的初始化函数
net.biases{1}.learn=[1]; %阀值在学习过程中是否调整。
net.biases{1}.learnFcn='learnp'; %阀值的学习函数
%======1============定义第一层权值的延迟时间,初始化函数,学习时是否调整权值,学习函数,权值的加权函数===================
net.inputWeights{1}.delays=0; %各输入延迟数
net.inputWeights{1}.initFcn='initzero'; %输入权值的初始化函数
net.inputWeights{1}.learn=1; %权值在学习过程中是否调整
net.inputWeights{1}.learnFcn='learnp'; %输入权值的学习函数
net.inputWeights{1}.weightFcn='dotprod'; %该属性定义了输入权值的加权函数
net.adaptFcn='trains'; %定义了网络的自适应调整函数
net.initFcn='initlay'; %该属性定义了网络的初始化函数
net.performFcn='mae'; %网络输出误差的性能函数
net.trainFcn='trainc'; %该属性定义了网络的训练函数
net=init(net);
p=[0.1 0.7 0.8 0.8 1.0 0.3 0.0 -0.3 -0.5 -1.5;1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 -1.5 -1.3];
t=[1 1 1 0 0 1 1 1 0 0; 0 0 0 0 0 1 1 1 1 1];
%net.trainParam.epochs=18;==================
net=train(net,p,t);
handle=plotpc(net.iw{1},net.b{1}); %同时返回 输入和目标函数图像。
y=sim(net,p); %仿真
figure;
plotpv(p,y);
handle=plotpc(net.iw{1},net.b{1},handle);
|