diff options
| author | ziejd2 | 2017-09-28 15:04:40 -0500 |
|---|---|---|
| committer | ziejd2 | 2017-09-28 15:04:40 -0500 |
| commit | 8070dc963753142bb86c4ed698d91fd623ed28e7 (patch) | |
| tree | d0f6dd8fc46a49b819aa55c1a90faa14d8448883 /sourcecodes/bnt-master/netlab3.3/demprior.m | |
| parent | 7cc31810d53176e805532b2789955f4eedbce6bb (diff) | |
| download | BNW-8070dc963753142bb86c4ed698d91fd623ed28e7.tar.gz | |
BNW using Octave instead of Matlab.
This version of BNW should perform the same as the original version. The only difference is that it uses Octave instead of Matlab when running BayesNet Toolbox during parameter learning. I am calling this BNW_1.02. It can be accessed at: compbio.uthsc.edu/BNW_1.02
Diffstat (limited to 'sourcecodes/bnt-master/netlab3.3/demprior.m')
| -rw-r--r-- | sourcecodes/bnt-master/netlab3.3/demprior.m | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/netlab3.3/demprior.m b/sourcecodes/bnt-master/netlab3.3/demprior.m new file mode 100644 index 00000000..4ad975a9 --- /dev/null +++ b/sourcecodes/bnt-master/netlab3.3/demprior.m @@ -0,0 +1,406 @@ +function demprior(action); +%DEMPRIOR Demonstrate sampling from a multi-parameter Gaussian prior. +% +% Description +% This function plots the functions represented by a multi-layer +% perceptron network when the weights are set to values drawn from a +% Gaussian prior distribution. The parameters AW1, AB1 AW2 and AB2 +% control the inverse variances of the first-layer weights, the hidden +% unit biases, the second-layer weights and the output unit biases +% respectively. Their values can be adjusted on a logarithmic scale +% using the sliders, or by typing values into the text boxes and +% pressing the return key. +% +% See also +% MLP +% + +% Copyright (c) Ian T Nabney (1996-2001) + +if nargin<1, + action='initialize'; +end; + +if strcmp(action,'initialize') + + aw1 = 0.01; + ab1 = 0.1; + aw2 = 1.0; + ab2 = 1.0; + + % Create FIGURE + fig=figure( ... + 'Name','Sampling from a Gaussian prior', ... + 'Position', [50 50 480 380], ... + 'NumberTitle','off', ... + 'Color', [0.8 0.8 0.8], ... + 'Visible','on'); + + % The TITLE BAR frame + uicontrol(fig, ... + 'Style','frame', ... + 'Units','normalized', ... + 'HorizontalAlignment', 'center', ... + 'Position', [0.5 0.82 0.45 0.1], ... + 'BackgroundColor',[0.60 0.60 0.60]); + + % The TITLE BAR text + uicontrol(fig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.54 0.85 0.40 0.05], ... + 'HorizontalAlignment', 'left', ... + 'String', 'Sampling from a Gaussian prior'); + + % Frames to enclose sliders + uicontrol(fig, ... + 'Style', 'frame', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.05 0.08 0.35 0.18]); + + uicontrol(fig, ... + 'Style', 'frame', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.05 0.3 0.35 0.18]); + + uicontrol(fig, ... + 'Style', 'frame', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.05 0.52 0.35 0.18]); + + uicontrol(fig, ... + 'Style', 'frame', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.05 0.74 0.35 0.18]); + + % Frame text + uicontrol(fig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.07 0.17 0.06 0.07], ... + 'String', 'aw1'); + + % Frame text + uicontrol(fig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.07 0.39 0.06 0.07], ... + 'String', 'ab1'); + + % Frame text + uicontrol(fig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.07 0.61 0.06 0.07], ... + 'String', 'aw2'); + + % Frame text + uicontrol(fig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.07 0.83 0.06 0.07], ... + 'String', 'ab2'); + + % Slider + minval = -5; maxval = 5; + aw1slide = uicontrol(fig, ... + 'Style', 'slider', ... + 'Units', 'normalized', ... + 'Value', log10(aw1), ... + 'BackgroundColor', [0.8 0.8 0.8], ... + 'Position', [0.07 0.1 0.31 0.05], ... + 'Min', minval, 'Max', maxval, ... + 'Callback', 'demprior update'); + + % Slider + ab1slide = uicontrol(fig, ... + 'Style', 'slider', ... + 'Units', 'normalized', ... + 'Value', log10(ab1), ... + 'BackgroundColor', [0.8 0.8 0.8], ... + 'Position', [0.07 0.32 0.31 0.05], ... + 'Min', minval, 'Max', maxval, ... + 'Callback', 'demprior update'); + + % Slider + aw2slide = uicontrol(fig, ... + 'Style', 'slider', ... + 'Units', 'normalized', ... + 'Value', log10(aw2), ... + 'BackgroundColor', [0.8 0.8 0.8], ... + 'Position', [0.07 0.54 0.31 0.05], ... + 'Min', minval, 'Max', maxval, ... + 'Callback', 'demprior update'); + + % Slider + ab2slide = uicontrol(fig, ... + 'Style', 'slider', ... + 'Units', 'normalized', ... + 'Value', log10(ab2), ... + 'BackgroundColor', [0.8 0.8 0.8], ... + 'Position', [0.07 0.76 0.31 0.05], ... + 'Min', minval, 'Max', maxval, ... + 'Callback', 'demprior update'); + + % The graph box + haxes = axes('Position', [0.5 0.28 0.45 0.45], ... + 'Units', 'normalized', ... + 'Visible', 'on'); + + % Text display of hyper-parameter values + + format = '%8f'; + + aw1val = uicontrol(fig, ... + 'Style', 'edit', ... + 'Units', 'normalized', ... + 'Position', [0.15 0.17 0.23 0.07], ... + 'String', sprintf(format, aw1), ... + 'Callback', 'demprior newval'); + + ab1val = uicontrol(fig, ... + 'Style', 'edit', ... + 'Units', 'normalized', ... + 'Position', [0.15 0.39 0.23 0.07], ... + 'String', sprintf(format, ab1), ... + 'Callback', 'demprior newval'); + + aw2val = uicontrol(fig, ... + 'Style', 'edit', ... + 'Units', 'normalized', ... + 'Position', [0.15 0.61 0.23 0.07], ... + 'String', sprintf(format, aw2), ... + 'Callback', 'demprior newval'); + + ab2val = uicontrol(fig, ... + 'Style', 'edit', ... + 'Units', 'normalized', ... + 'Position', [0.15 0.83 0.23 0.07], ... + 'String', sprintf(format, ab2), ... + 'Callback', 'demprior newval'); + + % The SAMPLE button + uicontrol(fig, ... + 'Style','push', ... + 'Units','normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position',[0.5 0.08 0.13 0.1], ... + 'String','Sample', ... + 'Callback','demprior replot'); + + % The CLOSE button + uicontrol(fig, ... + 'Style','push', ... + 'Units','normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position',[0.82 0.08 0.13 0.1], ... + 'String','Close', ... + 'Callback','close(gcf)'); + + % The HELP button + uicontrol(fig, ... + 'Style','push', ... + 'Units','normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position',[0.66 0.08 0.13 0.1], ... + 'String','Help', ... + 'Callback','demprior help'); + + % Save handles to objects + + hndlList=[fig aw1slide ab1slide aw2slide ab2slide aw1val ab1val aw2val ... + ab2val haxes]; + set(fig, 'UserData', hndlList); + + demprior('replot') + + +elseif strcmp(action, 'update'), + + % Update when a slider is moved. + + hndlList = get(gcf, 'UserData'); + aw1slide = hndlList(2); + ab1slide = hndlList(3); + aw2slide = hndlList(4); + ab2slide = hndlList(5); + aw1val = hndlList(6); + ab1val = hndlList(7); + aw2val = hndlList(8); + ab2val = hndlList(9); + haxes = hndlList(10); + + aw1 = 10^get(aw1slide, 'Value'); + ab1 = 10^get(ab1slide, 'Value'); + aw2 = 10^get(aw2slide, 'Value'); + ab2 = 10^get(ab2slide, 'Value'); + + format = '%8f'; + set(aw1val, 'String', sprintf(format, aw1)); + set(ab1val, 'String', sprintf(format, ab1)); + set(aw2val, 'String', sprintf(format, aw2)); + set(ab2val, 'String', sprintf(format, ab2)); + + demprior('replot'); + +elseif strcmp(action, 'newval'), + + % Update when text is changed. + + hndlList = get(gcf, 'UserData'); + aw1slide = hndlList(2); + ab1slide = hndlList(3); + aw2slide = hndlList(4); + ab2slide = hndlList(5); + aw1val = hndlList(6); + ab1val = hndlList(7); + aw2val = hndlList(8); + ab2val = hndlList(9); + haxes = hndlList(10); + + aw1 = sscanf(get(aw1val, 'String'), '%f'); + ab1 = sscanf(get(ab1val, 'String'), '%f'); + aw2 = sscanf(get(aw2val, 'String'), '%f'); + ab2 = sscanf(get(ab2val, 'String'), '%f'); + + set(aw1slide, 'Value', log10(aw1)); + set(ab1slide, 'Value', log10(ab1)); + set(aw2slide, 'Value', log10(aw2)); + set(ab2slide, 'Value', log10(ab2)); + + demprior('replot'); + +elseif strcmp(action, 'replot'), + + % Re-sample from the prior and plot graphs. + + oldFigNumber=watchon; + + hndlList = get(gcf, 'UserData'); + aw1slide = hndlList(2); + ab1slide = hndlList(3); + aw2slide = hndlList(4); + ab2slide = hndlList(5); + haxes = hndlList(10); + + aw1 = 10^get(aw1slide, 'Value'); + ab1 = 10^get(ab1slide, 'Value'); + aw2 = 10^get(aw2slide, 'Value'); + ab2 = 10^get(ab2slide, 'Value'); + + axes(haxes); + cla + set(gca, ... + 'Box', 'on', ... + 'Color', [0 0 0], ... + 'XColor', [0 0 0], ... + 'YColor', [0 0 0], ... + 'FontSize', 14); + axis([-1 1 -10 10]); + set(gca,'DefaultLineLineWidth', 2); + + nhidden = 12; + prior = mlpprior(1, nhidden, 1, aw1, ab1, aw2, ab2); + xvals = -1:0.005:1; + nsample = 10; % Number of samples from prior. + hold on + plot([-1 0; 1 0], [0 -10; 0 10], 'b--'); + net = mlp(1, nhidden, 1, 'linear', prior); + for i = 1:nsample + net = mlpinit(net, prior); + yvals = mlpfwd(net, xvals'); + plot(xvals', yvals, 'y'); + end + + watchoff(oldFigNumber); + +elseif strcmp(action, 'help'), + + % Provide help to user. + + oldFigNumber=watchon; + + helpfig = figure('Position', [100 100 480 400], ... + 'Name', 'Help', ... + 'NumberTitle', 'off', ... + 'Color', [0.8 0.8 0.8], ... + 'Visible','on'); + + % The HELP TITLE BAR frame + uicontrol(helpfig, ... + 'Style','frame', ... + 'Units','normalized', ... + 'HorizontalAlignment', 'center', ... + 'Position', [0.05 0.82 0.9 0.1], ... + 'BackgroundColor',[0.60 0.60 0.60]); + + % The HELP TITLE BAR text + uicontrol(helpfig, ... + 'Style', 'text', ... + 'Units', 'normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position', [0.26 0.85 0.6 0.05], ... + 'HorizontalAlignment', 'left', ... + 'String', 'Help: Sampling from a Gaussian Prior'); + + helpstr1 = strcat( ... + 'This demonstration shows the effects of sampling from a Gaussian', ... + ' prior over weights for a two-layer feed-forward network. The', ... + ' parameters aw1, ab1, aw2 and ab2 control the inverse variances of', ... + ' the first-layer weights, the hidden unit biases, the second-layer', ... + ' weights and the output unit biases respectively. Their values can', ... + ' be adjusted on a logarithmic scale using the sliders, or by', ... + ' typing values into the text boxes and pressing the return key.', ... + ' After setting these values, press the ''Sample'' button to see a', ... + ' new sample from the prior. '); + helpstr2 = strcat( ... + 'Observe how aw1 controls the horizontal length-scale of the', ... + ' variation in the functions, ab1 controls the input range over', ... + ' such variations occur, aw2 sets the vertical scale of the output', ... + ' and ab2 sets the vertical off-set of the output. The network has', ... + ' 12 hidden units. '); + hstr(1) = {helpstr1}; + hstr(2) = {''}; + hstr(3) = {helpstr2}; + + % The HELP text + helpui = uicontrol(helpfig, ... + 'Style', 'edit', ... + 'Units', 'normalized', ... + 'ForegroundColor', [0 0 0], ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', [1 1 1], ... + 'Min', 0, ... + 'Max', 2, ... + 'Position', [0.05 0.2 0.9 0.8]); + + [hstrw , newpos] = textwrap(helpui, hstr, 70); + set(helpui, 'String', hstrw, 'Position', [0.05, 0.2, 0.9, newpos(4)]); + + + % The CLOSE button + uicontrol(helpfig, ... + 'Style','push', ... + 'Units','normalized', ... + 'BackgroundColor', [0.6 0.6 0.6], ... + 'Position',[0.4 0.05 0.2 0.1], ... + 'String','Close', ... + 'Callback','close(gcf)'); + + watchoff(oldFigNumber); + +end; + |
