one_direction

                Never    
clear all
nntwarn off
X=-1:0.3:1;
X = nonzeros(X);
Y=X;

Z=zeros(length(X), length(Y));
XX = [];
YY = [];
ZZ = [];

for i = 1 : length(X)
	for j = 1 : length(Y)
		XX = [XX X(i)]; 
		YY = [YY Y(j)];
		Z(i, j) = 1/(X(i)^2 + Y(j)^2);
		ZZ = [ZZ Z(i, j)];
	end
end

P = [XX; YY];
[R, ~] = size(P);
S1 = 150;
S2 = 70;
[S3, Q] = size(ZZ);
disp_freq = 100; 
max_epoch = 10000;
err_goal = 1e-4;
lr = .001; 
error = [];

[W1, B1] = nwtan (S1, R); 
[W2, B2] = nwtan (S2, S1);
[W3, B3] = rands (S3, S2); 

A1 = tansig (W1*P, B1);
A2 = tansig (W2*A1, B2);
A3 = purelin (W3*A2, B3);
E = ZZ - A3;
SSE = sumsqr (E);

for epoch = 1 : max_epoch % pętla uczenia
	if SSE < err_goal
        epoch = epoch - 1;
		break;
	end
	
	D3 = deltalin (A3, E);
	D2 = deltatan (A2, D3, W3);
	D1 = deltalin (A1, D2, W2);

    [dW3,dB3]=learnbp(A2,D3,lr);
    [dW2,dB2]=learnbp(A1,D2,lr);                    % 
    [dW1,dB1]=learnbp(P,D1,lr);  
	
	W1 = W1 + dW1; B1 = B1 + dB1;	
	W2 = W2 + dW2; B2 = B2 + dB2;
	W3 = W3 + dW3; B3 = B3 + dB3;
	
	A1 = tansig (W1*P, B1);
	A2 = tansig (W2*A1, B2);
	A3 = purelin (W3*A2, B3);
	E = ZZ - A3;
	SSE = sumsqr(E);
	error = [error, SSE];
	
	if (rem (epoch, disp_freq) == 0)
		epoch
		SSE
	
		
     mesh(X,Y,reshape(ZZ,[length(X),length(Y)]),'edgecolor','r')
         hold on
         mesh(X,Y,reshape(A3,[length(X),length(Y)]),'edgecolor','b')
         hold off
        pause(1e-20)
    end
end

Raw Text