나는 진짜 가치있는 출력을위한 신경 네트워크를 훈련하는 중이 야, 난 그냥 사각형 보간처럼 보이는 네트 보간 된 집합을 제공합니다. 그러나 역 전파는 항상주지 않습니다. 내게 입력에 잘 맞는, 나는 더 높은 값의 입력 및 정상화 된 출력뿐만 아니라 기능을 추가하려고했지만 도움이되지 않습니다. 네트워크가 3 레이어 1 입력 1 숨겨진 1 출력 및 하나 출력 노드 이 문제를 어떻게 해결할 수 있습니까? 나는 또한이 비용 함수를 사용 했습니까?실제 값을 신경 네트워크 backpropagation을 사용하여
for k = 1:m
C= C+(y(k)-a2(k))^2;
end
내 코드 :
clc;
clear all;
close all;
input_layer_size = 4;
hidden_layer_size = 60;
num_labels = 1;
load('Xs');
load('Y-s');
theta1=randInitializeWeights(4, 60);
theta2=randInitializeWeights(60, 1);
plot (xq,vq)
hold on
xq=polyFeatures(xq,4);
param=[theta1(:) ;theta2(:)];
[J ,Grad]= nnCostFunction(param,input_layer_size ,hidden_layer_size,num_labels,xq,vq,0);
options = optimset('MaxIter', 50);
costFunction = @(p) nnCostFunction(p, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, xq, vq, 10);
[nn_params, cost] = fmincg(costFunction, param, options);
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
num_labels, (hidden_layer_size + 1));
l=xq(:,1);
out =predictTest(Theta1,Theta2,xq);
accuracy=mean(double(out == vq)) * 100
plot (l,out,'yellow');
hold off
function [J grad] = nnCostFunction(nn_params, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, ...
X, y, lambda)
y(841:901)=0;
y=y/2.2;
Theta1 = reshape((nn_params(1:hidden_layer_size * (input_layer_size+1))), ...
hidden_layer_size, (input_layer_size +1));
Theta2 = reshape(nn_params((1+(hidden_layer_size * (input_layer_size +1))):end), ...
num_labels, (hidden_layer_size +1));
m = size(X, 1);
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));
X= [ones(m,1) X];
z1=X*Theta1';
a1 = sigmoid(z1);
a1= [ones(size(a1,1),1) a1];
z2=a1*Theta2';
a2= sigmoid(z2);
for k = 1:m
J= J+(y(k)-a2(k))^2;
end
J= J/m;
Theta1(:,1)=zeros(1,size(Theta1,1));
Theta2(:,1)=zeros(1,size(Theta2,1));
s1=sum (sum (Theta1.^2));
s2=sum (sum (Theta2.^2));
s3= lambda *(s2 +s1);
s3=s3/(2*m);
J=J+s3;
D2=zeros(size(Theta2));
D1=zeros(size(Theta1));
for i= 1:m
delta3=a2(i)-y(i);
v=[0 sigmoidGradient(z1(i,:))];
delta2=(Theta2'*delta3').*v';
D2=D2+delta3'*a1(i,:) ;
D1=D1+delta2(2:end)*X(i,:);
end
Theta1_grad = D1./m + (lambda/m)*[zeros(size(Theta1,1), 1) Theta1(:, 2:end)];
Theta2_grad = D2./m + (lambda/m)*[zeros(size(Theta2,1), 1) Theta2(:, 2:end)];
grad = [Theta1_grad(:) ; Theta2_grad(:)];
end
function W = randInitializeWeights(L_in, L_out)
epsilon_init = 0.5;
W = rand(L_out, 1 + L_in)*2*epsilon_init - epsilon_init;
end
입력이 1 : 9 0.01 단위를 보간 대상 0 사이 수있다 : 사각형 펄스와 같은 2.2
linear interpolation of data vs predicted in red
updated after increasing epochs
스택 오버플로에 오신 것을 환영합니다. 네트워크의 토폴로지 및 일부 입력 및 출력 데이터에 대한 자세한 정보를 제공 할 수 있습니까? 가중치 초기화와 함께 전체 알고리즘을 포함하십시오. –
감사합니다. 내용을 업데이트했습니다. –
제공 한 각 입력에 대해 예상되는 출력 데이터의 작은 테이블을 추가 할 수 있습니까? –