%bp3;例4.3 % P=[-6 -6.1 -4.1 -4 4 4.1 6 6.1]; T=[0.0 0.0 0.97 0.99 0.01 0.03 1 1]; net=newlind(P,T); w1=net.iw{1,1} %线性网路的权值 b1=net.b{1} %线性网络的偏差 y=sim(net,P); %axis('equal') net=newcf(minmax(P),[1],{'logsig'},'traingd'); %创建一层非线性网络 net.trainParam.epochs=400; %初始化训练次数 net.trainParam.goal = 0.2297; net=train(net,P,T); %训练网络 w2=net.iw{1,1} %非线性网路的权值 b2=net.b{1} %非线性网络的偏差 Y=sim(net,P); pause plot(P,T,'r+'); %画输入点 hold on plot(P,y); %画线性输入输出点的连线 plot(P,Y,'r:') %画非线性输入输出点的连线 hold off
时间: 2024-02-14 08:07:31 浏览: 128
这段代码实现了一个简单的线性神经网络和一个单层非线性神经网络的训练,并对比了它们在给定数据集上的表现。
具体实现过程如下:
1. 定义输入和输出数据 P 和 T。
2. 使用 newlind 函数创建一个线性神经网络,其中包含一个输入层、一个输出层和一个线性激活函数。训练这个网络可以得到其权值 w1 和偏差 b1。
3. 通过 sim 函数将输入数据 P 输入到神经网络中,得到输出结果 y。
4. 使用 newcf 函数创建一个单层非线性神经网络,其中包含一个输入层、一个输出层和一个 sigmoid 激活函数。这个网络使用梯度下降算法进行训练。初始化训练次数为 400,并设定目标误差为 0.2297。
5. 训练非线性神经网络,得到其权值 w2 和偏差 b2。
6. 通过 sim 函数将输入数据 P 输入到非线性神经网络中,得到输出结果 Y。
7. 绘制输入数据点和线性神经网络输出结果之间的连线,绘制输入数据点和非线性神经网络输出结果之间的连线。
完整的 MATLAB 代码如下:
```matlab
P = [-6 -6.1 -4.1 -4 4 4.1 6 6.1];
T = [0.0 0.0 0.97 0.99 0.01 0.03 1 1];
% 线性神经网络
net = newlind(P, T);
w1 = net.iw{1,1}; % 权值
b1 = net.b{1}; % 偏差
y = sim(net, P); % 输出结果
% 单层非线性神经网络
net = newcf(minmax(P),[1],{'logsig'},'traingd');
net.trainParam.epochs = 400;
net.trainParam.goal = 0.2297;
net = train(net, P, T);
w2 = net.iw{1,1}; % 权值
b2 = net.b{1}; % 偏差
Y = sim(net, P); % 输出结果
% 绘图
plot(P, T, 'r+');
hold on;
plot(P, y);
plot(P, Y, 'r:');
hold off;
xlabel('Input');
ylabel('Output');
legend('Input', 'Linear', 'Nonlinear');
```
阅读全文