您好我用三层神经网络设计了XOR。现在我有一个类似于xor的新问题,但我仍然无法弄清楚如何解决它。
问题在于:
我想区分红色区域和蓝色区域。我可以在垂直方向上设置-1到1,在水平方向上设置-1到1。
任何身体都可以给我一个线索吗?或matlab中的某种示例代码或网络配置?
答案 0 :(得分:4)
当我了解ANN概念时,我有类似的任务,我将与您分享代码,只需要很少的更改即可达到目标。
clear all
close all
K1size = 200;
K2size = 300;
K1 = randn(K1size,2) - [ones(K1size,1)*2 ones(K1size,1)];
K2 = randn(K2size,2) + [ones(K2size,1) ones(K2size,1)*2];
figure(1)
plot(K1(1, 1), K1(1, 2), 'ro');
hold on
for i = 1:200
plot(K1(i, 1), K1(i, 2), 'ro');
end;
for i = 1:300
plot(K2(i, 1), K2(i, 2), 'bx');
end;
xlim([-5 5]);
ylim([-5 5]);
hold off
input = [K1 ;K2];
target = [zeros(K1size,1); ones(K2size,1)]; %K1 data gets target values of zero, K2 - ones
%网络设置
net = fitnet(5);
net.trainParam.min_grad = 0.000001;
net.trainParam.epochs = 200;
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
net.trainParam.max_fail = 15;
net.layers{1}.transferFcn = 'logsig';
%培训
net = train(net, inputN', targetN');
yN = net(inputN');
%我们正在使曲面采用轮廓:
n = 50;
xx = linspace(-20, 20, n);
yy = linspace(-20, 20, n);
[X, Y] = meshgrid(xx, yy);
Z = zeros(n, n);
%从整个网格的受过训练的网络计算值(我们将看到两种数据类型是如何分开的)
G = net( [Y(:)' ; X(:)'] ) ; % 0 <= G <=1, like targets, so we can use it to make surface
Z = vec2mat(G, n);
%绘制并显示轮廓
figure(2)
surf(X, Y, Z);
figure(1)
hold on
contour(X,Y,Z,1, 'linewidth',4)
结果