我正在尝试在MATLAB中创建一个简单的XOR门,仅用于展示前馈网络,但我在使输出与目标匹配时遇到了麻烦。我对MATLAB中的ANN还比较新,所以任何帮助都将不胜感激。以下是我的简单代码:
% XOR门
x = [0 0 1 1; 0 1 0 1] ;
t = [0,1,1,0];
net = feedforwardnet(2);
net = train(net,x,t);
y = net(x)
disp("权重:")
disp(net.IW{1})
disp("偏置:")
disp(net.b{1})
最后的部分只是用来让我查看使用的权重和偏置。为了提供一些背景,这是来自一个问题单,我之前创建了OR和AND门作为例子,但这些是线性可分的,所以我可以用单个感知器来完成!这个XOR门让我相当困惑!
提前感谢任何帮助 😀
编辑:对于那些没有从其他提供的帖子中得到帮助的人,这里更新一下,我使用径向基函数(MATLAB中的newrb)成功解决了XOR门,并且从给定的目标中得到了完美的结果。:)
回答:
尝试这个工作代码:x代表训练示例,y是目标。我在网络中添加了一个额外的隐藏层,包含两个神经元。你必须在训练之前先配置网络。网络使用S形函数作为激活函数。
x = [0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1; 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1];
y =[0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0];
net = feedforwardnet([2 2]);
net = configure(net,x,y);
net.layers{3}.transferFcn = 'logsig';
[net,tr] = train(net,x,y);
net(x)