wolffd@0: function demnlab(action); wolffd@0: %DEMNLAB A front-end Graphical User Interface to the demos wolffd@0: % wolffd@0: % Description wolffd@0: % This function will start a user interface allowing the user to select wolffd@0: % different demonstration functions to view. The demos are divided into wolffd@0: % 4 groups, with the demo being executed by selecting the desired wolffd@0: % option from a pop-up menu. wolffd@0: % wolffd@0: % See also wolffd@0: % wolffd@0: wolffd@0: % Copyright (c) Ian T Nabney (1996-2001) wolffd@0: wolffd@0: % If run without parameters, initialise gui. wolffd@0: if nargin<1, wolffd@0: action='initialise'; wolffd@0: end; wolffd@0: wolffd@0: if strcmp(action,'initialise'), wolffd@0: wolffd@0: % Create figure wolffd@0: fig = figure( ... wolffd@0: 'Name', 'Netlab Demos', ... wolffd@0: 'NumberTitle', 'off', ... wolffd@0: 'Color', [0.7529 0.7529 0.7529], ... wolffd@0: 'Visible', 'on'); wolffd@0: wolffd@0: % Create GROUPS wolffd@0: % Bottom of demo buttons wolffd@0: group1_bot = 0.20; wolffd@0: group1_top = 0.75; wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [0.03 group1_bot 0.94 group1_top - group1_bot], ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5]); wolffd@0: wolffd@0: % Bottom of help and close buttons wolffd@0: group2_bot = 0.04; wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [0.03 group2_bot 0.94 0.12], ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5]); wolffd@0: wolffd@0: % Draw title wolffd@0: hLogoAxis = axes( ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [0.05 0.82 0.90 0.14], ... wolffd@0: 'Box', 'off', ... wolffd@0: 'XColor', [0 0 0], ... wolffd@0: 'YColor', [0 0 0], ... wolffd@0: 'Visible', 'on'); wolffd@0: wolffd@0: load netlogo; % load image and colour map wolffd@0: colormap(netcmap(1:3,:)); % change colour map: don't need many entries wolffd@0: image(nlogo); % draw logo wolffd@0: axis('image'); % ensures pixels on axis are square wolffd@0: axis off; % turn axes off wolffd@0: wolffd@0: % Create static text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.05 group1_top-0.1 0.90 0.08], ... wolffd@0: 'String', 'Select demo to run:'); wolffd@0: wolffd@0: % First row text offset wolffd@0: tRow1Offset = 0.14; wolffd@0: % Offset between text and button wolffd@0: TBoffset = 0.07; wolffd@0: % First row button offset wolffd@0: bRow1Offset = tRow1Offset+TBoffset; wolffd@0: % ONE text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.08 group1_top-tRow1Offset 0.36 0.05], ... wolffd@0: 'String', 'Regression'); wolffd@0: wolffd@0: popup1str(1) = {'Select Option'}; wolffd@0: popup1str(2) = {'Multi-Layer Perceptron'}; wolffd@0: popup1str(3) = {'Radial Basis Function'}; wolffd@0: popup1str(4) = {'Mixture Density Network'}; wolffd@0: % ONE popup wolffd@0: hPop1 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String', popup1str, ... wolffd@0: 'Position', [0.08 group1_top-bRow1Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup1'); wolffd@0: wolffd@0: % TWO text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.56 group1_top-tRow1Offset 0.36 0.05], ... wolffd@0: 'String', 'Classification'); wolffd@0: wolffd@0: popup2str(1) = popup1str(1); wolffd@0: popup2str(2) = {'Generalised Linear Model (2 class)'}; wolffd@0: popup2str(3) = {'Generalised Linear Model (3 class)'}; wolffd@0: popup2str(4) = {'Multi-Layer Perceptron'}; wolffd@0: popup2str(5) = {'K nearest neighbour'}; wolffd@0: % TWO popup wolffd@0: hPop2 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String', popup2str, ... wolffd@0: 'Position', [0.56 group1_top-bRow1Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup2'); wolffd@0: wolffd@0: tRow2Offset = 0.30; wolffd@0: bRow2Offset = tRow2Offset+TBoffset; wolffd@0: % THREE text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.08 group1_top - tRow2Offset 0.36 0.05], ... wolffd@0: 'String', 'Density Modelling and Clustering'); wolffd@0: wolffd@0: popup3str(1) = popup1str(1); wolffd@0: popup3str(2) = {'Gaussian Mixture (EM training)'}; wolffd@0: popup3str(3) = {'Gaussian Mixture (spherical)'}; wolffd@0: popup3str(4) = {'Gaussian Mixture (diagonal)'}; wolffd@0: popup3str(5) = {'Gaussian Mixture (full)'}; wolffd@0: popup3str(6) = {'Neuroscale'}; wolffd@0: popup3str(7) = {'GTM (EM training)'}; wolffd@0: popup3str(8) = {'GTM (visualisation)'}; wolffd@0: popup3str(9) = {'K-means clustering'}; wolffd@0: popup3str(10) = {'Self-Organising Map'}; wolffd@0: % TWO popup wolffd@0: % THREE popup wolffd@0: hPop3 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String', popup3str, ... wolffd@0: 'Position', [0.08 group1_top - bRow2Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup3'); wolffd@0: wolffd@0: % FOUR text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.56 group1_top - tRow2Offset 0.36 0.05], ... wolffd@0: 'String', 'Bayesian Methods'); wolffd@0: wolffd@0: popup4str(1) = popup1str(1); wolffd@0: popup4str(2) = {'Sampling the MLP Prior'}; wolffd@0: popup4str(3) = {'Evidence Approximation for MLP'}; wolffd@0: popup4str(4) = {'Evidence Approximation for RBF'}; wolffd@0: popup4str(5) = {'Evidence Approximation in Classification'}; wolffd@0: popup4str(6) = {'ARD for MLP'}; wolffd@0: popup4str(7) = {'Sampling the GP Prior'}; wolffd@0: popup4str(8) = {'GPs for Regression'}; wolffd@0: popup4str(9) = {'ARD for GP'}; wolffd@0: % FOUR popup wolffd@0: hPop4 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String', popup4str, ... wolffd@0: 'Position', [0.56 group1_top - bRow2Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup4'); wolffd@0: wolffd@0: wolffd@0: tRow3Offset = 0.45; wolffd@0: bRow3Offset = tRow3Offset+TBoffset; wolffd@0: % FIVE text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.08 group1_top - tRow3Offset 0.36 0.05], ... wolffd@0: 'String', 'Optimisation and Visualisation'); wolffd@0: wolffd@0: popup5str(1) = popup1str(1); wolffd@0: popup5str(2) = {'Algorithm Comparison'}; wolffd@0: popup5str(3) = {'On-line Gradient Descent'}; wolffd@0: popup5str(4) = {'Hinton Diagrams'}; wolffd@0: % FIVE popup wolffd@0: hPop5 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String',popup5str, ... wolffd@0: 'Position', [0.08 group1_top - bRow3Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup5'); wolffd@0: wolffd@0: % SIX text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.5 0.5 0.5], ... wolffd@0: 'Position', [0.56 group1_top - tRow3Offset 0.36 0.05], ... wolffd@0: 'String', 'Sampling'); wolffd@0: wolffd@0: popup6str(1) = popup1str(1); wolffd@0: popup6str(2) = {'Sampling a Gaussian'}; wolffd@0: popup6str(3) = {'MCMC sampling (Metropolis)'}; wolffd@0: popup6str(4) = {'Hybrid MC (Gaussian mixture)'}; wolffd@0: popup6str(5) = {'Hybrid MC for MLP I'}; wolffd@0: popup6str(6) = {'Hybrid MC for MLP II'}; wolffd@0: % SIX popup wolffd@0: hPop6 = uicontrol(fig, ... wolffd@0: 'Style','popup', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'String', popup6str, ... wolffd@0: 'Position', [0.56 group1_top - bRow3Offset 0.36 0.08], ... wolffd@0: 'BackgroundColor', [0.7 0.7 0.7], ... wolffd@0: 'Callback', 'demnlab popup6'); wolffd@0: wolffd@0: wolffd@0: % Create HELP button wolffd@0: uicontrol(fig, ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position' , [0.05 group2_bot+0.02 0.40 0.08], ... wolffd@0: 'String', 'Help', ... wolffd@0: 'Callback', 'demnlab help'); wolffd@0: wolffd@0: % Create CLOSE button wolffd@0: uicontrol(fig, ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position' , [0.55 group2_bot+0.02 0.40 0.08], ... wolffd@0: 'String', 'Close', ... wolffd@0: 'Callback', 'close(gcf)'); wolffd@0: wolffd@0: hndlList=[fig hPop1 hPop2 hPop3 hPop4 hPop5 hPop6]; wolffd@0: set(fig, 'UserData', hndlList); wolffd@0: set(fig, 'HandleVisibility', 'callback'); wolffd@0: wolffd@0: elseif strcmp(action, 'popup1'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(2); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demmlp1; wolffd@0: case 3 wolffd@0: demrbf1; wolffd@0: case 4 wolffd@0: demmdn1; wolffd@0: end; wolffd@0: wolffd@0: elseif strcmp(action,'popup2'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(3); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demglm1; wolffd@0: case 3 wolffd@0: demglm2; wolffd@0: case 4 wolffd@0: demmlp2; wolffd@0: case 5 wolffd@0: demknn1; wolffd@0: end wolffd@0: wolffd@0: elseif strcmp(action,'popup3'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(4); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demgmm1; wolffd@0: case 3 wolffd@0: demgmm2; wolffd@0: case 4 wolffd@0: demgmm3; wolffd@0: case 5 wolffd@0: demgmm4; wolffd@0: case 6 wolffd@0: demns1; wolffd@0: case 7 wolffd@0: demgtm1; wolffd@0: case 8 wolffd@0: demgtm2; wolffd@0: case 9 wolffd@0: demkmn1; wolffd@0: case 10 wolffd@0: demsom1; wolffd@0: end wolffd@0: wolffd@0: elseif strcmp(action,'popup4'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(5); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demprior; wolffd@0: case 3 wolffd@0: demev1; wolffd@0: case 4 wolffd@0: demev3; wolffd@0: case 5 wolffd@0: demev2; wolffd@0: case 6 wolffd@0: demard; wolffd@0: case 7 wolffd@0: demprgp; wolffd@0: case 8 wolffd@0: demgp; wolffd@0: case 9 wolffd@0: demgpard; wolffd@0: end wolffd@0: wolffd@0: elseif strcmp(action,'popup5'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(6); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demopt1; wolffd@0: case 3 wolffd@0: demolgd1; wolffd@0: case 4 wolffd@0: demhint; wolffd@0: end wolffd@0: wolffd@0: wolffd@0: elseif strcmp(action,'popup6'), wolffd@0: wolffd@0: hndlList=get(gcf,'UserData'); wolffd@0: hPop = hndlList(7); wolffd@0: wolffd@0: selected = get(hPop, 'Val'); wolffd@0: set(hPop, 'Val', [1]); wolffd@0: wolffd@0: switch selected wolffd@0: case 2 wolffd@0: demgauss; wolffd@0: case 3 wolffd@0: demmet1; wolffd@0: case 4 wolffd@0: demhmc1; wolffd@0: case 5 wolffd@0: demhmc2; wolffd@0: case 6 wolffd@0: demhmc3; wolffd@0: end wolffd@0: wolffd@0: elseif strcmp(action, 'help'), wolffd@0: wolffd@0: helpStr = {'To run a demo, press the appropriate button.'; ... wolffd@0: 'Instructions and information will appear in the Matlab';... wolffd@0: 'command window.'}; wolffd@0: wolffd@0: hHelpDlg = helpdlg(helpStr, 'Netlab Demo Help'); wolffd@0: wolffd@0: end;