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); |