annotate toolboxes/FullBNT-1.0.7/netlab3.3/netunpak.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
rev   line source
wolffd@0 1 function net = netunpak(net, w)
wolffd@0 2 %NETUNPAK Separates weights vector into weight and bias matrices.
wolffd@0 3 %
wolffd@0 4 % Description
wolffd@0 5 % NET = NETUNPAK(NET, W) takes an net network data structure NET and a
wolffd@0 6 % weight vector W, and returns a network data structure identical to
wolffd@0 7 % the input network, except that the componenet weight matrices have
wolffd@0 8 % all been set to the corresponding elements of W. If there is a MASK
wolffd@0 9 % field in the NET data structure, then the weights in W are placed in
wolffd@0 10 % locations corresponding to non-zero entries in the mask (so W should
wolffd@0 11 % have the same length as the number of non-zero entries in the MASK).
wolffd@0 12 %
wolffd@0 13 % See also
wolffd@0 14 % NETPAK, NETFWD, NETERR, NETGRAD
wolffd@0 15 %
wolffd@0 16
wolffd@0 17 % Copyright (c) Ian T Nabney (1996-2001)
wolffd@0 18
wolffd@0 19 unpakstr = [net.type, 'unpak'];
wolffd@0 20
wolffd@0 21 % Check if we are being passed a masked set of weights
wolffd@0 22 if (isfield(net, 'mask'))
wolffd@0 23 if length(w) ~= size(find(net.mask), 1)
wolffd@0 24 error('Weight vector length does not match mask length')
wolffd@0 25 end
wolffd@0 26 % Do a full pack of all current network weights
wolffd@0 27 pakstr = [net.type, 'pak'];
wolffd@0 28 fullw = feval(pakstr, net);
wolffd@0 29 % Replace current weights with new ones
wolffd@0 30 fullw(logical(net.mask)) = w;
wolffd@0 31 w = fullw;
wolffd@0 32 end
wolffd@0 33
wolffd@0 34 net = feval(unpakstr, net, w);