2013-11-25 103 views
1

嗨我設計了三層神經網絡異或。現在我有一個類似xor的新問題,但我仍然無法弄清楚如何解決它。如何在Matlab中設計MLP神經網絡?

這裏的問題:

enter image description here

我想區分藍色area.As紅色區域,我就可以有-1的面積爲1和垂直-1到1水平。

可以任何身體給我一個線索?或者matlab中的某種示例代碼或網絡配置?

+0

你到目前爲止嘗試過什麼?你有沒有看過[由Matlab提供的教程](http://www.mathworks.de/products/neural-network/examples.html) – thewaywewalk

回答

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) 

的結果 Figure1 and Figure2