# HG changeset patch # User luisf # Date 1332253731 0 # Node ID 751fa3bddd3038b6672a3e353e9a4dbb3ec8ae9c # Parent 83af80baf959b9eee36c676cc1bafd6ae2276421 Added config file for SMALL_solve (removed the if/else code from SMALL_solve); added headers to both config files; diff -r 83af80baf959 -r 751fa3bddd30 config/SMALL_learn_config.m --- a/config/SMALL_learn_config.m Tue Mar 20 12:29:47 2012 +0000 +++ b/config/SMALL_learn_config.m Tue Mar 20 14:28:51 2012 +0000 @@ -1,18 +1,32 @@ +%% Configuration file used in SMALL_learn +% +% Use this file to change the dictionary learning algorithms in SMALLBox +% Please refer to the documentation before editing this file +% Centre for Digital Music, Queen Mary, University of London. +% This file copyright 2009 Ivan Damnjanovic. +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2 of the +% License, or (at your option) any later version. See the file +% COPYING included with this distribution for more information. +% +%% - if strcmpi(DL.toolbox,'KSVD') - param=DL.param; +if strcmpi(DL.toolbox,'KSVD') + param=DL.param; param.data=Problem.b; - + D = eval([DL.name,'(param)']);%, ''t'', 5);']); - elseif strcmpi(DL.toolbox,'KSVDS') - param=DL.param; +elseif strcmpi(DL.toolbox,'KSVDS') + param=DL.param; param.data=Problem.b; D = eval([DL.name,'(param, ''t'', 5);']); - elseif strcmpi(DL.toolbox,'SPAMS') +elseif strcmpi(DL.toolbox,'SPAMS') - X = Problem.b; + X = Problem.b; param=DL.param; D = eval([DL.name,'(X, param);']); @@ -23,9 +37,9 @@ for i = 1: size(D,2) D(:,i)=D(:,i)/norm(D(:,i)); end - elseif strcmpi(DL.toolbox,'SMALL') +elseif strcmpi(DL.toolbox,'SMALL') - X = Problem.b; + X = Problem.b; param=DL.param; D = eval([DL.name,'(X, param);']); @@ -36,8 +50,8 @@ D(:,i)=D(:,i)/norm(D(:,i)); end - elseif strcmpi(DL.toolbox,'TwoStepDL') - +elseif strcmpi(DL.toolbox,'TwoStepDL') + DL=SMALL_two_step_DL(Problem, DL); % we need to make sure that columns are normalised to @@ -49,7 +63,7 @@ D = DL.D; elseif strcmpi(DL.toolbox,'MMbox') - + DL = wrapper_mm_DL(Problem, DL); % we need to make sure that columns are normalised to @@ -58,18 +72,18 @@ for i = 1: size(DL.D,2) DL.D(:,i)=DL.D(:,i)/norm(DL.D(:,i)); end - D = DL.D; - + D = DL.D; + % To introduce new dictionary learning technique put the files in -% your Matlab path. Next, unique name for your toolbox needs +% your Matlab path. Next, unique name for your toolbox needs % to be defined and also prefferd API for toolbox functions -% +% % elseif strcmpi(DL.toolbox,'') % % This is an example of API that can be used: % % - get training set from Problem part of structure % % - assign parameters defined in the main program % -% X = Problem.b; +% X = Problem.b; % param=DL.param; % % % - Evaluate the function (DL.name - defined in the main) with @@ -77,7 +91,7 @@ % % D = eval([DL.name,'();']); - else +else printf('\nToolbox has not been registered. Please change SMALL_learn file.\n'); return - end +end diff -r 83af80baf959 -r 751fa3bddd30 config/SMALL_solve_config.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/SMALL_solve_config.m Tue Mar 20 14:28:51 2012 +0000 @@ -0,0 +1,80 @@ +%% Configuration file used in SMALL_solve +% +% Use this file to change the solvers in SMALLBox +% Please refer to the documentation before editing this file + +% Centre for Digital Music, Queen Mary, University of London. +% This file copyright 2009 Ivan Damnjanovic. +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2 of the +% License, or (at your option) any later version. See the file +% COPYING included with this distribution for more information. +% +%% + +if strcmpi(solver.toolbox,'sparselab') + y = eval([solver.name,'(SparseLab_A, b, n,',solver.param,');']); +elseif strcmpi(solver.toolbox,'sparsify') + if isa(Problem.A,'float') + y = eval([solver.name,'(b, A, n,',solver.param,');']); + else + y = eval([solver.name,'(b, A, n, ''P_trans'', AT,',solver.param,');']); + end +elseif (strcmpi(solver.toolbox,'spgl1')||strcmpi(solver.toolbox,'gpsr')) + y = eval([solver.name,'(b, A,',solver.param,');']); +elseif (strcmpi(solver.toolbox,'SPAMS')) + y = eval([solver.name,'(b, A, solver.param);']); +elseif (strcmpi(solver.toolbox,'SMALL')) + if isa(Problem.A,'float') + y = eval([solver.name,'(A, b, n,',solver.param,');']); + else + y = eval([solver.name,'(A, b, n,',solver.param,',AT);']); + end +elseif (strcmpi(solver.toolbox, 'ompbox')) + G=A'*A; + epsilon=solver.param.epsilon; + maxatoms=solver.param.maxatoms; + y = eval([solver.name,'(A, b, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); +elseif (strcmpi(solver.toolbox, 'ompsbox')) + basedict = Problem.basedict; + if issparse(Problem.A) + A = Problem.A; + else + A = sparse(Problem.A); + end + G = dicttsep(basedict,A,dictsep(basedict,A,speye(size(A,2)))); + epsilon=solver.param.epsilon; + maxatoms=solver.param.maxatoms; + y = eval([solver.name,'(basedict, A, b, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); + Problem.sparse=1; +elseif (strcmpi(solver.toolbox, 'ALPS')) + if ~isa(Problem.A,'float') + % ALPS does not accept implicit dictionary definition + A = opToMatrix(Problem.A, 1); + end + [y, numiter, time, y_path] = wrapper_ALPS_toolbox(b, A, solver.param); +elseif (strcmpi(solver.toolbox, 'MMbox')) + if ~isa(Problem.A,'float') + % MMbox does not accept implicit dictionary definition + A = opToMatrix(Problem.A, 1); + end + + [y, cost] = wrapper_mm_solver(b, A, solver.param); + + % To introduce new sparse representation algorithm put the files in + % your Matlab path. Next, unique name for your toolbox and + % prefferd API needs to be defined. + % + % elseif strcmpi(solver.toolbox,'') + % + % % - Evaluate the function (solver.name - defined in the main) with + % % parameters given above + % + % y = eval([solver.name,'();']); + +else + printf('\nToolbox has not been registered. Please change SMALL_solver file.\n'); + return +end diff -r 83af80baf959 -r 751fa3bddd30 util/SMALL_learn.m --- a/util/SMALL_learn.m Tue Mar 20 12:29:47 2012 +0000 +++ b/util/SMALL_learn.m Tue Mar 20 14:28:51 2012 +0000 @@ -1,9 +1,9 @@ function DL = SMALL_learn(Problem,DL) -%% SMALL Dictionary Learning -% -% Function gets as input Problem and Dictionary Learning (DL) structures +%% SMALL Dictionary Learning +% +% Function gets as input Problem and Dictionary Learning (DL) structures % In Problem structure field b with the training set needs to be defined -% In DL fields with name of the toolbox and solver, and parameters file +% In DL fields with name of the toolbox and solver, and parameters file % for particular dictionary learning technique needs to be present. % % Outputs are Learned dictionary and time spent as a part of DL structure @@ -18,28 +18,31 @@ % License, or (at your option) any later version. See the file % COPYING included with this distribution for more information. %% + global SMALL_path + if (DL.profile) - fprintf('\nStarting Dictionary Learning %s... \n', DL.name); + fprintf('\nStarting Dictionary Learning %s... \n', DL.name); end - start=cputime; - tStart=tic; - - % configuration file - run(fullfile(SMALL_path, 'config/SMALL_learn_config.m')); - + +start=cputime; +tStart=tic; + +% toolboxes configuration file +run(fullfile(SMALL_path, 'config/SMALL_learn_config.m')); + %% % Dictionary Learning time tElapsed=toc(tStart); DL.time = cputime - start; if (DL.profile) - fprintf('\n%s finished task in %2f seconds (cpu time). \n', DL.name, DL.time); - fprintf('\n%s finished task in %2f seconds (tic-toc time). \n', DL.name, tElapsed); + fprintf('\n%s finished task in %2f seconds (cpu time). \n', DL.name, DL.time); + fprintf('\n%s finished task in %2f seconds (tic-toc time). \n', DL.name, tElapsed); end DL.time=tElapsed; -% If dictionary is given as a sparse matrix change it to full +% If dictionary is given as a sparse matrix change it to full - DL.D = full(D); - +DL.D = full(D); + end - + diff -r 83af80baf959 -r 751fa3bddd30 util/SMALL_solve.m --- a/util/SMALL_solve.m Tue Mar 20 12:29:47 2012 +0000 +++ b/util/SMALL_solve.m Tue Mar 20 14:28:51 2012 +0000 @@ -15,9 +15,11 @@ % published by the Free Software Foundation; either version 2 of the % License, or (at your option) any later version. See the file % COPYING included with this distribution for more information. -% +% %% +global SMALL_path + if isa(Problem.A,'float') A = Problem.A; SparseLab_A=Problem.A; @@ -45,72 +47,9 @@ start=cputime; tStart=tic; -if strcmpi(solver.toolbox,'sparselab') - y = eval([solver.name,'(SparseLab_A, b, n,',solver.param,');']); -elseif strcmpi(solver.toolbox,'sparsify') - if isa(Problem.A,'float') - y = eval([solver.name,'(b, A, n,',solver.param,');']); - else - y = eval([solver.name,'(b, A, n, ''P_trans'', AT,',solver.param,');']); - end -elseif (strcmpi(solver.toolbox,'spgl1')||strcmpi(solver.toolbox,'gpsr')) - y = eval([solver.name,'(b, A,',solver.param,');']); -elseif (strcmpi(solver.toolbox,'SPAMS')) - y = eval([solver.name,'(b, A, solver.param);']); -elseif (strcmpi(solver.toolbox,'SMALL')) - if isa(Problem.A,'float') - y = eval([solver.name,'(A, b, n,',solver.param,');']); - else - y = eval([solver.name,'(A, b, n,',solver.param,',AT);']); - end -elseif (strcmpi(solver.toolbox, 'ompbox')) - G=A'*A; - epsilon=solver.param.epsilon; - maxatoms=solver.param.maxatoms; - y = eval([solver.name,'(A, b, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); -elseif (strcmpi(solver.toolbox, 'ompsbox')) - basedict = Problem.basedict; - if issparse(Problem.A) - A = Problem.A; - else - A = sparse(Problem.A); - end - G = dicttsep(basedict,A,dictsep(basedict,A,speye(size(A,2)))); - epsilon=solver.param.epsilon; - maxatoms=solver.param.maxatoms; - y = eval([solver.name,'(basedict, A, b, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); - Problem.sparse=1; -elseif (strcmpi(solver.toolbox, 'ALPS')) - if ~isa(Problem.A,'float') - % ALPS does not accept implicit dictionary definition - A = opToMatrix(Problem.A, 1); - end - [y, numiter, time, y_path] = wrapper_ALPS_toolbox(b, A, solver.param); -elseif (strcmpi(solver.toolbox, 'MMbox')) - if ~isa(Problem.A,'float') - % MMbox does not accept implicit dictionary definition - A = opToMatrix(Problem.A, 1); - end - - [y, cost] = wrapper_mm_solver(b, A, solver.param); - - - - % To introduce new sparse representation algorithm put the files in - % your Matlab path. Next, unique name for your toolbox and - % prefferd API needs to be defined. - % - % elseif strcmpi(solver.toolbox,'') - % - % % - Evaluate the function (solver.name - defined in the main) with - % % parameters given above - % - % y = eval([solver.name,'();']); - -else - printf('\nToolbox has not been registered. Please change SMALL_solver file.\n'); - return -end + +% solvers configuration file +run(fullfile(SMALL_path, 'config/SMALL_solve_config.m')); %% % Sparse representation time