2013-08-15 6 views
1

현재 복소 신경 신경 회로망 (CVNN)에 대한 학부 논문을 진행하고 있습니다. 내 주제는 을 기반으로합니다. 실제 가치가있는 분류 문제에 대한 단일 계층 복소수 신경망 .I는 아래에 주어진 데이터 집합 분류 그라데이션 하강 학습 규칙을 사용하고 있습니다 :복소수 신경망 (CVNN) 오류 발산

Data Set

내가 여기에 사용alogorithm는 페이지에서 볼 수 있습니다 복잡한 가치를 N으로 표시 다음 PDF의 946 EURON은 (CVN) 모델는 국지적 주 알고리즘 (3) 그 주제

Algorithm of CVN Model

그러나 대신 수렴을 얻는, 내 에러 곡선 발산 특성을 도시하고있다에있을 수 문서라도는 내 출력 오차 곡선.

error curve at CVNN implementation

내가 MATLAB 누군 구현이 뒤에 코드를 시뮬레이션하고는 아래와 같습니다 : 난 아직도 데이터 세트에이 반대 특성 뒤에 이유를 알아낼 수

clc 
clear all 
epoch=1000; 
n=8; 
%x=real input value 
in=dlmread('Diabetes1.txt'); 
x=in(1:384,1:8); 
%d=desired output value 
out=dlmread('Diabetes1.txt'); 
data_1=out(1:384,9); 
data_2=out(1:384,10); 


%m=complex representation of input 
m=(cos((pi).*(x(:,:)-0))+1i*sin((pi).*(x(:,:)-0))); 
% 
%research 
%m=i.*x(:,:) 
%m=x(:,:)+i.*x(:,:) 
%Wih=weight 
% 
    %m=x(:,:).*(cos(pi./4)+i.*sin(pi./4)); 

    Wih1 =0.5* exp(1i * 2*pi*rand(8,1)); 
    Wih2 =0.5* exp(1i * 2*pi*rand(8,1)); 

%Pih=bias 

    Pih1 =0.5*exp(1i * 2*pi*rand(1,1)); 
    Pih2 =0.5*exp(1i * 2*pi*rand(1,1)); 

for ite=1:epoch 
%  www(ite)=ite; 
    E_Total=0; 
    E1t=0; 
    E2t=0; 
    for j=1:384 

    %blr=learning rate  
    blr=0.1; 

    %cpat=current pattern 
    cpat = m(j,:); 
    z1=cpat*Wih1+Pih1; 
    u1=real(z1); 
    v1=imag(z1); 
    fu1=1/(1+exp(-u1)); 
    fv1=1/(1+exp(-v1)); 

    %y=actual output 
    %for activation function 1 
     y1=sqrt((fu1).^2+(fv1).^2); 

    %for activation function 2 
    % y1=(fu1-fv1).^2; 
    error1=(data_1(j,1)-y1); 
    E1=((data_1(j,1)-y1).^2); 

    t11=1./(1+exp(-u1)); 
    f11=t11.*(1-t11); 
    t21=1./(1+exp(-v1)); 
    f21=t21.*(1-t21); 

    %for activation function 1 
     r1= blr.*(data_1(j,1)-y1).*((t11.*f11)./y1)+i.*blr.*(data_1(j,1)-y1).*((t21.*f21)./y1); 

    %for activation function 2 
    %r1=2.*blr.*(data_1(j,1)-y1).*(t11-t21).*f11+1i.*2.*blr.*(data_1(j,1)-y1).*(t21-t11).*f21; 
%  
    Pih1=Pih1+r1; 
    Wih1= Wih1+(conj(m(j,:)))'.*r1; 


    %//////////////////////////////////////////////// 

    %cpat=current pattern 


    z2=cpat*Wih2+Pih2; 
    u2=real(z2); 
    v2=imag(z2); 
    fu2=1./(1+exp(-u2)); 
    fv2=1./(1+exp(-v2)); 
%   fu2=tanh(u2); 
%   fv2=tanh(v2); 

    %y=actual output 

    %for activation function 1 
     y2=sqrt((fu2).^2+(fv2).^2); 

    %for activation function 2 
    % y2=(fu2-fv2).^2; 
    error2=(data_2(j,1)-y2); 
    E2=((data_2(j,1)-y2).^2); 

    t12=1./(1+exp(-u2)); 
    f12=t12.*(1-t12); 
    t22=1./(1+exp(-v2)); 
    f22=t22.*(1-t22); 

    %for activation function1 
    r2= blr.*(data_2(j,1)-y2).*((t12.*f12)./y2)+i.*blr.*(data_2(j,1)-y2).*((t22.*f22)./y2); 

    %for activation function 2 
    %r2=2*blr*(data_2(j,1)-y2)*(t12-t22)*f12+1i*2*blr*(data_2(j,1)-y2)*(t22-t12)*f22; 

    Pih2=Pih2+r2; 
    Wih2= Wih2+(conj(m(j,:)))'.*r2; 
    %/////////////////////////////////////////////// 

     E1t=E1+E1t; 
     E2t=E2+E2t; 
     E_Total=(E1+E2+E_Total); 
     E1; 
     E2; 

    end 
     Err=E_Total/(2.*384); 
    figure(1) 
    plot(ite,Err,'b--') 
    hold on; 
    %figure(1) 


end 


dlmwrite('weight.txt',Wih1) 
dlmwrite('weight.txt', Wih2, '-append', ... 
    'roffset', 1, 'delimiter', ' ') 
dlmwrite('weight.txt', Pih1, '-append', ... 
    'roffset', 1, 'delimiter', ' ') 
dlmwrite('weight.txt', Pih2, '-append', ... 


'roffset', 1, 'delimiter', ' ') 

. 그래서 이것에 관한 어떤 종류의 도움도 인정됩니다.

답변

0

그래디언트 강하를 수행하는 경우 매우 일반적인 디버깅 기법은 계산 한 그래디언트가 손실 함수의 수치 그래디언트와 실제로 일치하는지 확인하는 것입니다.

이다

작은 DX의 다양한

(f(x+dx)-f(x))/dx==f'(x)*dx 

를 확인한다. 보통 각 방향을 따라 시도하고 다양한 임의의 방향으로 시도하십시오. 또한 x의 다양한 값에 대해이 검사를 수행하려고합니다.

0

복잡한 역 전파를 위해서는이 blog을 한눈에 알아야합니다.

holomorphic의 경우 복합 BP는 상당히 직선적입니다.

non-holomorphic 기능 (모든 CVNN에는 적어도 하나의 비자 동형 함수가 있어야 함)에주의해야합니다.