To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _FullBNT / BNT / CPDs / @softmax_CPD / set_fields.m @ 8:b5b38998ef3b
History | View | Annotate | Download (2.03 KB)
| 1 |
function CPD = set_params(CPD, varargin) |
|---|---|
| 2 |
% SET_PARAMS Set the parameters (fields) for a softmax_CPD object |
| 3 |
% CPD = set_params(CPD, name/value pairs) |
| 4 |
% |
| 5 |
% The following optional arguments can be specified in the form of name/value pairs: |
| 6 |
% (Let ns(i) be the size of node i, X = ns(X), Y = ns(Y), Q1=ns(dps(1)), Q2=ns(dps(2)), ... |
| 7 |
% where dps are the discrete parents; if there are no discrete parents, we set Q1=1.) |
| 8 |
% |
| 9 |
% weights - (W(:,j,a,b,...) - W(:,j',a,b,...)) is ppn to dec. boundary |
| 10 |
% between j,j' given Q1=a,Q2=b,... [ randn(X,Y,Q1,Q2,...) ] |
| 11 |
% offset - (offset(j,a,b,...) - offset(j',a,b,...)) is the offset to dec. boundary |
| 12 |
% between j,j' given Q1=a,Q2=b,... [ randn(Y,Q1,Q2,...) ] |
| 13 |
% clamped - 'yes' means don't adjust params during learning ['no'] |
| 14 |
% max_iter - the maximum number of steps to take [10] |
| 15 |
% verbose - 'yes' means print the LL at each step of IRLS ['no'] |
| 16 |
% wthresh - convergence threshold for weights [1e-2] |
| 17 |
% llthresh - convergence threshold for log likelihood [1e-2] |
| 18 |
% approx_hess - 'yes' means approximate the Hessian for speed ['no'] |
| 19 |
% |
| 20 |
% e.g., CPD = set_params(CPD,'offset', zeros(ns(i),1)); |
| 21 |
|
| 22 |
args = varargin; |
| 23 |
nargs = length(args); |
| 24 |
glimsz = prod(CPD.sizes(CPD.dpndx)); |
| 25 |
for i=1:2:nargs |
| 26 |
switch args{i},
|
| 27 |
case 'discrete', str='nothing to do'; |
| 28 |
case 'clamped', CPD = set_clamped(CPD, strcmp(args{i+1}, 'yes'));
|
| 29 |
case 'max_iter', CPD.max_iter = args{i+1};
|
| 30 |
case 'verbose', CPD.verbose = strcmp(args{i+1}, 'yes');
|
| 31 |
case 'max_iter', CPD.max_iter = args{i+1};
|
| 32 |
case 'wthresh', CPD.wthresh = args{i+1};
|
| 33 |
case 'llthresh', CPD.llthresh = args{i+1};
|
| 34 |
case 'approx_hess', CPD.approx_hess = strcmp(args{i+1}, 'yes');
|
| 35 |
case 'weights', for q=1:glimsz, CPD.glim{q}.w1 = args{i+1}(:,:,q); end;
|
| 36 |
case 'offset', |
| 37 |
if glimsz == 1 |
| 38 |
CPD.glim{1}.b1 = args{i+1};
|
| 39 |
else |
| 40 |
for q=1:glimsz, CPD.glim{q}.b1 = args{i+1}(:,q); end;
|
| 41 |
end |
| 42 |
otherwise, |
| 43 |
error(['invalid argument name ' args{i}]);
|
| 44 |
end |
| 45 |
end |