%定义用4x4布尔量网络表示的三个量A,I,O
XA=[1 1 1 1;1 -1 -1 1;1 1 1 1;1 -1 -1 1];
XI=[-1 1 -1 -1;-1 1 -1 -1;-1 1 -1 -1;-1 1 -1 -1];
XO=[1 1 1 1;1 -1 -1 1;1 -1 -1 1;1 1 1 1];
%将每个用4x4布尔量网络表示的三个量按列表示,生成输入矩阵X
X=[XA(:) XI(:) XO(:)];
X
%定义每个量对应的目标向量,生成目标矩阵T
TA=[1;-1;-1];
TI=[-1;1;1];
TO=[-1;-1;1];
T=[TA TI TO];
T
%建立网络,并获得权值和偏值
[R,N1]=size(X);
[S2,N1]=size(T);
S1=9;
net=newff(minmax(X),[S1 S2],{'tansig','tansig'},'traingdx');
w=net.LW{2,1};
b1=net.b{1};
b2=net.b{2};
y1=sim(net,X);
y1
%利用不含有噪声的理想输入训练网络, 并获得权值和偏值
net.performFcn='sse'; %平方和误差函数
net.trainParam.goal=0.000001; %训练目标误差
net.trainParam.epochs=5000; %训练时间
net.trainParam.show=20; %计算步长
net.trainParam.mc=0.95 %冲量参数
[net,tr]=train(net,X,T);
w=net.LW{2,1};
b1=net.b{1};
b2=net.b{2};
y2=sim(net,X);
y2
%为使网络对输入有一定的容错能力,再利用不含和含有噪声的输入数据训练网络
net.trainParam.goal=0.001; %训练目标误差
net.trainParam.epochs=500; %训练时间
net1=net;
T1=[T T T T];
for i=1:10
X1=[X X (X+randn(R,N1)*0.1) (X+randn(R,N1)*0.2)];
[net1,tr]=train(net1,X1,T1);
end
y3=sim(net1,X1);
y3
%为使网络总能正确对理想信号进行识别,再利用理想信号训练网络
[net1,tr]=train(net1,X,T);
w=net.LW{2,1};
b1=net.b{1};
b2=net.b{2};
X1=X;
y4=sim(net1,X1)
%求给定输入时网络输出
X4=[1 1 1 1; 1 -1 -1 1;1 1 1 1;1 1 -1 1];
X1=[X4(:)];
y4=sim(net1,X1)
%求未经过噪声训练的网络net的输出,加以比较
X1=X;
y4=sim(net,X1)
X4=[1 1 1 1; 1 -1 -1 1;1 1 1 1;1 1 -1 1];
X1=[X4(:)];
y4=sim(net,X1)