multiple input single output neural network
조회 수: 2 (최근 30일)
이전 댓글 표시
%%% I want to calulate Mean square error
clc ;
clear all;
load('input');
load('output');
% s=5 ; %neurons
x=input ;
y=output ;
S=8; %neurons
Nmax=100;
MinTraErr=0.01;
NORMG=0.0001;
umin=0.05;umax=1000;uscal=0.5;
inp= size(x,1);
out= size(y,1);
R=2;
n0=3;
k=1;
%RANDOMIZATION
relation = [x;y];
ind = 1:length(x);
a = ind(randperm(length(ind)));
shuffeled_vector = relation(:,a);
%NORMALIZATION
for i=1:size(x,1)
xn(i,:)=2*((x(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))-0.5);
xmin(i) = min(x(i,:));
xmax(i) = max(x(i,:));
end
yn=2*((y-min(y))/(max(y)-min(y))-0.5);
ymin = min(y);
ymax = max(y);
%SEPERATION
RATIO = 0.7; % Train-Test Ratio
train_data = shuffeled_vector(:,1:fix(length(x)*RATIO));
test_data = shuffeled_vector(:,fix(length(x)*RATIO)+1:end);
ti_vector = train_data(1:R,:);
y_vector = train_data(end,:);
ti_vector_test = test_data(1:R,:);
y_vector_test = test_data(end,:);
%Training
for p=1:10000 % p is the (number of data)/input
t(1,p)=x(1,p) ;
Yreal(1,p)=y(1,p);
end
Yreal=Yreal.';% transpose
t=t.'
b=size(t);
e=b(1);
R=b(2);
xmin=-50;xmax=50;detend=10^-6;
umin=0.05;umax=1000;uscal=0.5;
syms X [S*R+2*S+1,1] ; syms y;
h=(exp(y)-exp(-y))/(exp(y)+exp(-y)); %Activation Function
%Iteration number
maxiter=100; iter=1;
% X=randn(1,S*(R+2)+1);
bh=X(S*R+1:S*R+S,1);
wo=X((S*(R+1)+1):(S*(R+2)),1);
wo=transpose(wo);
bo = X(end);
bi=X(S*R+2*S+1,1);
wi=reshape(X(1:S*R),S,R);
J=vpa(ones(e,S*R+2*S+1));
%Jacobian
for i=1:e
%Model Outputs
sum=0;
for j=1:S
sum1=0;
for k=1:R
sum1=sum1+wi(j,k)*t(i,k);
end
A(j,1)=subs(h,y,sum1+bh(j));
sum=sum+wo(1,j)*A(j,1);
end
Ymodel(i,1)=sum+bi;
% jacobian matrix
for j=1:S*R
k=mod(j-1,S)+1;
m=fix((j-1)/S)+1;
J(i,j)=-(wo(1,k)*t(i,m))*(1-(A(k,1)^2));
xk(j,1)=wi(k,m);
end
for j=S*R+1:S*R+S
J(i,j)=-wo(1,j-S*R)*(1-(A(j-S*R,1)^2));
xk(j,1)=bh(j-S*R,1);
end
for j=S*R+S+1:S*R+2*S
J(i,j)=-A(j-S*R-S,1);
xk(j,1)=wo(1,j-S*R-S);
end
J(i,S*R+2*S+1)=-1;
xk(j+1,1)=bi(1,1);
end
xk=rand(S*R+2*S+1,1);
E=vpa(Yreal-Ymodel);
f=vpa(E.'*E);
loop1=1; Mu=1;
while loop1
iter=iter+1;
Jxk=double(subs(J,x,xk));
fxk=double(subs(f,x,xk));
Exk=double(subs(E,x,xk));
loop2=1;
while loop2
in=-inv(Jxk.'*Jxk+Mu*eye(size(Jxk,2)));
pk=(in*Jxk.'*Exk);
zk=xk+pk;
Ymodelzk=double(subs(Ymodel,x,zk));
% % while loop2
% % Jacob=-inv(Jxk.'*Jxk+u*eye(size(Jxk,2)));
% % pk=(Jacob*Jxk.'*Exk);
% % zk=xk+pk;
% % % Ymodelzk=double(subs(Ymodel,x,zk));
% % for i = 1:length(y_vector)
% % y_hat_initial = wo*tanh(wi*ti_vector(:,i)+bh)+bo;
% % y_hat(i) = y_hat_initial;
% % end
E=double(Yreal-Ymodelzk);
fzk=double(E.'*E);
if fzk<fxk
fx=subs(f,x,xk+x1.*pk);
xmin=-50;xmax=50;detend=10^-6;
[sk]= GoldenSectionMethodE(fx,xmax,xmin,detend)
xk=double(xk+sk.*pk)
u=u/ucale;
loop2=0;
else
u=u*uscale;
end
if u<umin && u>umax
loop1=0;
loop2=0;
end
end
fxk1=double(subs(f,x,xk));
NORMG=norm(sk*pk);
end
댓글 수: 0
답변 (1개)
Varun Sai Alaparthi
2023년 1월 18일
Hello Ecem,
In order to better answer your query, could you provide me with some more details on what exactly you are looking for?
However, in case you are looking for a function to calculate mean squared error you can refer to this function ‘immse’.
Mse = immse(X,Y);
% Run this code fir calculating mse between X,Y matrices
If you have any further queries, please feel free to reply to my answer
Sincerely,
Varun
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Sequence and Numeric Feature Data Workflows에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!