Как решить проблему Matlab с градиентным спуском - PullRequest
0 голосов
/ 18 октября 2019

Я должен был пройти дополнительный курс по машинному обучению, мы сделали упражнение с учителем в первом классе, и у меня возникли некоторые трудности в его завершении. Учитель сказал нам вычислить градиенты gx1, gx2 и вычислить новую точку. Я никогда раньше не использовал Matlab, и я новичок в области машинного обучения. Если кто-нибудь сможет мне помочь, я буду признателен.

clear all
close all
clc

funstr = '3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3 - 
y.^5).*exp(-x.^2-y.^2) - 1/3*exp(-(x+1).^2 - y.^2) ';%funstr = '10- 
(exp(-1*(x^2+3*y^2)))';

%funstr = 'x^2 + y^2';

f=vectorize(inline(funstr));
range=[-3 3 -3 3]; %range=[-1 1 -1 1];


Ndiv=50;
dx=(range(2)-range(1))/Ndiv; dy=(range(4)-range(3))/Ndiv;
[x,y] = meshgrid(range(1):dx:range(2),range(3):dy:range(4));
z=(f(x,y));
figure(1); surfc(x,y,z);
s=15;
znv=zeros(s,1);
figure

for i = 1:s

  k=0;
  niter=200;

  hstep = 0.001;

  alfa=0.05;

  xrange=range(2)-range(1);
  yrange=range(4)-range(3);
  x1=rand*xrange+range(1);
  x2=rand*yrange+range(3);

  while (k<niter)

    zn=f(x1,x2);
    %complete: calculate gradients gx1 and gx2

    contour(x,y,z,15);
    hold on;
    plot(x1,x2,'.','markersize',10,'markerfacecolor','g');
    drawnow;
    hold on;

    %Complete: calculate new point


    k=k+1;
    znv(i)=zn;
  end
 end
 znMin = min(znv);
...