⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnd17pc.m

📁 《神经网络设计》(neural networks design)的源代码
💻 M
📖 第 1 页 / 共 2 页
字号:
% Respond to mouse down.
%
% ME('down')
%==================================================================

elseif strcmp(cmd,'down') & (fig) & (nargin == 1)

  %handled = 0;
  for i=1:9

    if any([3 6] == i)
      maxval = 2;
    elseif any([1 4 8 9] == i)
      maxval = 4;
    elseif any([2 5 7] == i)
      maxval = 1;
    else
      maxval = 4;
    end

    pt = get(meters(i),'currentpoint');
    x = pt(1);
    y = pt(3);

    if (abs(x) <= maxval*1.3) & (y >= -0.3 & y <= 1.3)
      handled = 1;

      % SET UP MOTION TRACKING IN METER
      set(fig,'WindowButtonMotionFcn',[me '(''m_motion'',' num2str(i) ')']);
      set(fig,'WindowButtonUpFcn',[me '(''m_up'',' num2str(i) ')']);
      feval(me,'m_motion',i);
    end
  end

  %if (~handled)
  %  pt = get(func_axis,'currentpoint');
  %  x = pt(1);
  %  y = pt(3);
  %  ylim = get(func_axis,'ylim');
  %  if (abs(x) <= p_max) & (y >= ylim(1) & y <= ylim(2))

      % SET UP MOTION TRACKING FOR FUNCTION
  %    set(fig,'WindowButtonMotionFcn',[me '(''f_motion'')']);
  %    set(fig,'WindowButtonUpFcn',[me '(''f_up'')']);
  %    feval(me,'f_motion',i);
  %  end
  %end

%==================================================================
% Respond to motion in meter.
%
% ME('m_motion',meter_index)
%==================================================================

elseif strcmp(cmd,'m_motion') & (fig)
  
  if any([3 6] == arg1)
    maxval = 2;
  elseif any([1 4 8 9] == arg1)
    maxval = 4;
  elseif any([2 5 7] == arg1)
    maxval = 1;
  else
    maxval = 4;
  end

  % GET CURRENT POINT
  pt = get(meters(arg1),'currentpoint');
  x = pt(1);
  x = round(x*10/maxval)*maxval/10;
  x = max(-maxval,min(maxval,x));

  % GET DATA
  mdgray = nnmdgray;
  values = get(values_ptr,'userdata');
 
  % MOVE INDICATOR
  if any([8 9] == arg1)
      xdata = [0.2 -0.2 0]*maxval+x;
  else
      xdata = [0 0.2 -0.2]*maxval+x;
  end
  set(indicators(arg1),'facecolor',mdgray,'edgecolor',mdgray);
  set(indicators(arg1),'facecolor',nnwhite,'edgecolor',nndkblue,'xdata',xdata);

  % STORE DATA
  values(arg1) = x;
  set(values_ptr,'userdata',values);

%==================================================================
% Respond to mouse up in meter.
%
% ME('m_up',meter_index)
%==================================================================

elseif strcmp(cmd,'m_up') & (fig)
  
  % DISABLE TRACKING
  set(fig,'WindowButtonMotionFcn','');
  set(fig,'WindowButtonMotionFcn','');

  % RESET INDICATOR COLORS
  set(indicators(arg1),'facecolor',nnred,'edgecolor',nndkblue);

  % UPDATE FUNCTION
  cmd = 'update';

%==================================================================
% Respond to motion in function.
%
% ME('f_motion')
%==================================================================

%elseif strcmp(cmd,'f_motion') & (fig)
  
  % GET CURRENT POINT
%  pt = get(func_axis,'currentpoint');
%  x = pt(1);
%  x = max(-p_max,min(p_max,x));

  % GET DATA
%  mdgray = nnmdgray;
%  values = get(values_ptr,'userdata');
%  W1 = [values([1 4])' values([8 9])'];
%  b1 = values([2 5])';
%  W2 = values([3 6]);
%  b2 = values(7);
%  ltyell = nnltyell;
  
  % NEW INPUT & OUTPUT
%  p = x;
%  a = W2(1)*exp(-((p-W1(1)).*b1(1)).^2) + W2(2)*exp(-((p-W1(2)).*b1(2)).^2) + b2;

  % STORE DATA
%  values(10) = p;
%  values(11) = a;
%  set(values_ptr,'userdata',values);

%==================================================================
% Respond to mouse up in function.
%
% ME('f_up')
%==================================================================

%elseif strcmp(cmd,'f_up') & (fig)
  
  % DISABLE TRACKING
%  set(fig,'WindowButtonMotionFcn','');
%  set(fig,'WindowButtonMotionFcn','');

  % RESET P-LINE COLOR
%  red = nnred;
%  ltyell = nnltyell;

%==================================================================
% Set parameters.
%
% ME('set',W1,b1,W2,b2,f2)
%==================================================================

elseif strcmp(cmd,'set') & (fig) & (nargin == 6)

  % CHECK SIZES
  if all(size(arg1) == [2 1]) & ...
     all(size(arg2) == [2 1]) & ...
     all(size(arg3) == [1 2]) & ...
     all(size(arg4) == [1 1])

    % GET VALUES
    values = get(values_ptr,'userdata');
    p = values(10);
 
    % ALTER VALUES
    W1 = min(w_max,max(-w_max,arg1));
    b1 = min(w_max,max(-w_max,arg2));
    W2 = min(w_max,max(-w_max,arg3));
    b2 = min(w_max,max(-w_max,arg4));

    [R,Q] = size(p);
    a = W2(1)*exp(-((p-W1(1)).*b1(1)).^2) + W2(2)*exp(-((p-W1(2)).*b1(2)).^2) + b2*ones(1,Q);
    values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) p a];

    % SAVE VALUES
    set(values_ptr,'userdata',values);

    % MOVE METERS
    cmd = 'move';
  end

%==================================================================
% Randomize parameters.
%
% ME('random')
%==================================================================

elseif strcmp(cmd,'random') & (fig)

  % GET VALUES
  values = get(values_ptr,'userdata');
  p = values(10);
 
  % ALTER VALUES
  W1 = (rand(2,2)*8-4)*1;
  b1 = (rand(2,1)*2-1)*1;
  W2 = (rand(1,2)*4-2)*1;
  b2 = (rand(1,1)*2-1)*1;

  [R,Q] = size(p);

  xp=-p_max:p_max/div:p_max;
  yp=xp;
  num = length(xp);
  [X,Y] = meshgrid(xp,yp);
  xx=X(:); 
  yy=Y(:);
  Q=length(yy);
  A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
      + W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
  Am = reshape(A,num,num);
  trigger=0;
  v = [trigger trigger];

  a_max = max(A);
  a_min = min(A);
  a_edge = (a_max-a_min)*0.1;

  values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) xp A'];

  % SAVE VALUES
  set(values_ptr,'userdata',values);

  % MOVE METERS
  cmd = 'move';


%==================================================================
% Re-initialize parameters.
%
% ME('reset')
%==================================================================

elseif strcmp(cmd,'reset') & (fig)

  % GET VALUES
  values = get(values_ptr,'userdata');
  p = values(10);
 
  % CONSTANTS
  W1 = [1 -1;-1 1];
  b1 = [1;1];
  W2 = [2 2];
  b2 = [-1];

  [R,Q] = size(p);

  xp=-p_max:p_max/div:p_max;
  yp=xp;
  num = length(xp);
  [X,Y] = meshgrid(xp,yp);
  xx=X(:); 
  yy=Y(:);
  Q=length(yy);
  A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
      + W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
  Am = reshape(A,num,num);
  trigger=0;
  v = [trigger trigger];

  a_max = max(A);
  a_min = min(A);
  a_edge = (a_max-a_min)*0.1;

  values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) xp A'];

  % SAVE VALUES
  set(values_ptr,'userdata',values);

  % MOVE METERS
  cmd = 'move';

%==================================================================
% Get parameters.
%
% [W1,b1,W2,b2,f2] = ME('get')
%==================================================================

elseif strcmp(cmd,'get') & (fig)

  % GET DATA
  values = get(values_ptr,'userdata');
  ret1 = [values([1 4])' values([8 9])'];
  ret2 = values([2 5])';
  ret3 = values([3 6]);
  ret4 = values(7);
end

%==================================================================
% Move meters.
%
% ME('move')
%==================================================================

if strcmp(cmd,'move') & (fig)
  
  % GET DATA
  values = get(values_ptr,'userdata');

  % PICK PROPER ICON
  axes(fig_axis);

  % HILIGHT METERS
  mdgray = nnmdgray;
  red = nnred;
  white = nnwhite;
  dkblue = nndkblue;
  for i=1:9
    set(indicators(i),'facecolor',white);
  end
  nnpause(0.25)

  % MOVE METERS
  for i=1:9
    if any([3 6] == i)
      maxval = 2;
    elseif any([1 4 8 9] == i)
      maxval = 4;
    elseif any([2 5 7] == i)
      maxval = 1;
    else
      maxval = 4;
    end
    if any([8 9] == i)
        xx = [0.2 -0.2 0]*maxval+values(i);
    else
        xx = [0 0.2 -0.2]*maxval+values(i);
    end
    set(indicators(i),'facecolor',mdgray,'edgecolor',mdgray);
    set(indicators(i),'facecolor',white,'edgecolor',dkblue,'xdata',xx);
  end
  nnpause(0.25)

  % UNHILIGHT METERS
  for i=1:9
    set(indicators(i),'facecolor',red);
  end

  % ALWAYS DO AN UPDATE AFTERWARDS
  cmd = 'update';
end

%==================================================================
% Update function.
%
% ME('update')
%==================================================================

if strcmp(cmd,'update') & (fig)

  % GET DATA
  %tf = get(tf_ptr,'userdata');
  values = get(values_ptr,'userdata');
  W1 = [values([1 4])' values([8 9])'];
  b1 = values([2 5])';
  W2 = values([3 6]);
  b2 = values(7);
  xp = values(10);
  ltyell = nnltyell;
  red = nnred;

  % NEW FUNCTION
  xp=-p_max:p_max/div:p_max;
  yp=xp;
  num = length(xp);
  [X,Y] = meshgrid(xp,yp);
  xx=X(:); 
  yy=Y(:);
  Q=length(yy);
  A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
      + W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
  A = reshape(A,num,num);
  trigger=0;
  v = [trigger trigger];

  a_max = max(A);
  a_min = min(A);
  a_edge = (a_max-a_min)*0.1;

  % REDRAW LINES
  set(func_line,'color',nndkblue,'xdata',xp,'ydata',yp,'zdata',A)
  set(func_line2,'xdata',xp,'ydata',yp,'zdata',A)
  
  % STORE DATA
  set(values_ptr,'userdata',values);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -