2013-11-25 8 views
1

Привет Я разработал XOR с трехслойной нейронной сетью. Теперь у меня есть новая проблема, похожая на xor, но все же я не могу понять, как ее решить.Как сгладить MLP нейронную сеть в Matlab?

Вот проблема:

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

Смежные вопросы