Форум для обсуждения курса

24.03.2022 МТ-402

24.03.2022 МТ-402

de Артем Маковецкий -
Número de respuestas: 0

# 1 класс: (1,1),(2,4),(7,18),(12,15)
# 2 класс: (-3,5),(-4,9),(-5,12),(-15,2)
# 3 класс: (7,-3),(14,-18),(3,-22),(7,-13)
# 4 класс: (-1,-1),(-4,-9),(-3,-22),(-12,-15)
points = [1,2,7,12, -3,-4,-5,-15, 7,14,3,7, -1,-4,-3,-12;
1,4,18,15, 5,9,12,2, -3,-18,-22,-13, -1,-9,-22,-15];

for i = 1:3
for j = 1:16
if(i == 3)
H1(i,j) = 1;
else
H1(i,j) = points(i,j);
endif
endfor
endfor

function Y = fillY(H1)
for i = 1:size(H1,2)
if(H1(1,i) >= 0 && H1(2,i) >= 0)
Y(1,i) = 0;
Y(2,i) = 0;
elseif(H1(1,i) < 0 && H1(2,i) >= 0)
Y(1,i) = 0;
Y(2,i) = 1;
elseif(H1(1,i) < 0 && H1(2,i) < 0)
Y(1,i) = 1;
Y(2,i) = 1;
elseif(H1(1,i) >= 0 && H1(2,i) < 0)
Y(1,i) = 1;
Y(2,i) = 0;
endif
endfor
endfunction

function H2 = softmax(Z2)
n = size(Z2,2);
sum = zeros(1,n);

for i = 1:n
sum(1,i) = exp(Z2(1,i)) + exp(Z2(2,i));
endfor

for i = 1:size(Z2,1)
for j = 1:n
H2(i,j) = exp(Z2(i,j)) / sum(1,j);
endfor
endfor
endfunction

function H2 = sigmoid(Z2)
n = size(Z2,2);

for i = 1:size(Z2,1)
for j = 1:n
H2(i,j) = 1/(1 + exp(-1*Z2(i,j)));
endfor
endfor

endfunction

function H2 = relu(Z2)
n = size(Z2,2);

for i = 1:size(Z2,1)
for j = 1:n
if(Z2(i,j) <= 0)
H2(i,j) = 0;
else
H2(i,j) = Z2(i,j);
endif
endfor
endfor

endfunction

function res = hw(x)
n = size(x,2);

for i = 1:size(x,1)
for j = 1:n
if(x(i,j) <= 0)
res(i,j) = 0;
else
res(i,j) = 1;
endif
endfor
endfor

endfunction

function J = val_J(H2,Y)
J = norm(H2 - Y)^2;
endfunction

function H2 = directPass(H1,W)
Z2 = val_Z2(W,H1);
#H2 = softmax(Z2);
H2 = sigmoid(Z2);
endfunction

function Z2 = val_Z2(W,H1)
Z2 = W * H1;
endfunction

for i = 1:2
for j = 1:3
W(i,j) = 1;
endfor
endfor

Y = fillY(H1);
#H2 = directPass(H1,W);
W_prev = W;
W_next = W;
lambda = 0.1;
for i = 1:100
i
H2 = directPass(H1,W_prev);
J = val_J(H2,Y)
## delta = 2*(H2 - Y) .* (H2 .* (1 - H2));
delta = 2*(H2 - Y) .* hw(val_Z2(W_prev,H1));
gradient_J = delta * H1';
W_next = W_prev - lambda * gradient_J;
W_prev = W_next;
endfor

##J1 = val_J(H2,Y)
##
##delta = 2*(H2 - Y) .* (H2 .* (1 - H2));
##gradient_J = delta * H1';
##lambda = 0.01;
##W1 = W - lambda * gradient_J
##H2 = directPass(H1,W1);

##J2 = val_J(Y,H2)