% 2 "hold" szeparálása MLP-vel n=500; r=2; h=-1; a=pi*rand(n,1); b=rand(n,1)-0.5; x1=(r+b).*cos(a); x2=(r+b).*sin(a); A=[x1,x2;x1+r,-x2-h]; % 2n * 2-es tömb, minden sor 1 pontnak felel meg %%%%%%%%%%%%%%%%%%%%%%%%%% % Output elkészítése: %d=[zeros(n,1);ones(n,1)]; % output perceptronhoz: 0-k és 1-esek d=[repmat([1;0],1,n),repmat([0;1],1,n)]; % output MLP-hez: oszlopok 'one hot' vektorok figure gscatter(A(:,1),A(:,2),vec2ind(d),'bg'); %%%%%%%%%%%%%%%%%%%%%%%%%% % Hálózat inicializálása és tanítása: net=patternnet([3 5]); % 2 rejtett réteg, elsőben 3, másodikban 5 neuron % itt állíthatók a hálózat paraméterei, például: % net.trainParam.epochs=10; % net.divideParam.trainRatio=1; % net.divideParam.valRatio=0; % net.divideParam.testRatio=0; % net.performParam.regularization=0.2; net=train(net,A(:,1:2)',d); %%%%%%%%%%%%%%%%%%%%%%%%%% % Tesztelés: y=net(A(:,1:2)'); % Hálózat mit ad a tanítópontokra?, 2*2n-es tömb % y(:,30) % Hálózat általi output a 30. pontra. 2-elemű vektor, % amelyek valószínűségeloszlást alkotnak, összegük 1. % Rács készítése: grX=linspace(-3,5,50); % grid X grY=linspace(-1.5,2.5,50); % grid Y grid=[repelem(grX,1,50);repmat(grY,1,50)]; % tömb, rácspontok oszlopokban output=net(grid); % rácspontokra mit nyújt a hálózat hold on; gscatter(grid(1,:),grid(2,:),vec2ind(output),'cy','.'); % rácspontokat kiszínezzük % Rács máshogy, beépített paranccsal: [X,Y]=meshgrid(grX,grY); grid2=[X(:) Y(:)]; % rácspontok sorokban output2=net(grid2'); % gscatter(grid(1,:),grid(2,:),vec2ind(output2),'cy','.'); % rácspontokat kiszínezzük contour(X,Y,reshape(vec2ind(output2),length(grX),length(grY)));