Mercurial > hg > smallbox
view util/SMALL_learn.m @ 189:75b5dedcfd45 luisf_dev
created initialization file; changing SMALL_learn in order to initialize plugins.
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Thu, 16 Feb 2012 18:24:43 +0000 |
parents | b14209313ba4 |
children |
line wrap: on
line source
function DL = SMALL_learn(Problem,DL) %% 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 % for particular dictionary learning technique needs to be present. % % Outputs are Learned dictionary and time spent as a part of DL structure % % 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 (DL.profile) fprintf('\nStarting Dictionary Learning %s... \n', DL.name); end start=cputime; tStart=tic; 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; param.data=Problem.b; D = eval([DL.name,'(param, ''t'', 5);']); elseif strcmpi(DL.toolbox,'SPAMS') X = Problem.b; param=DL.param; D = eval([DL.name,'(X, param);']); % As some versions of SPAMS does not produce unit norm column % dictionaries, we need to make sure that columns are normalised to % unit lenght. for i = 1: size(D,2) D(:,i)=D(:,i)/norm(D(:,i)); end elseif strcmpi(DL.toolbox,'SMALL') X = Problem.b; param=DL.param; D = eval([DL.name,'(X, param);']); % we need to make sure that columns are normalised to % unit lenght. for i = 1: size(D,2) D(:,i)=D(:,i)/norm(D(:,i)); end elseif strcmpi(DL.toolbox,'TwoStepDL') DL=SMALL_two_step_DL(Problem, DL); % we need to make sure that columns are normalised to % unit lenght. for i = 1: size(DL.D,2) DL.D(:,i)=DL.D(:,i)/norm(DL.D(:,i)); end D = DL.D; elseif strcmpi(DL.toolbox,'MMbox') DL = wrapper_mm_DL(Problem, DL); % we need to make sure that columns are normalised to % unit lenght. for i = 1: size(DL.D,2) DL.D(:,i)=DL.D(:,i)/norm(DL.D(:,i)); end D = DL.D; % To introduce new dictionary learning technique put the files in % your Matlab path. Next, unique name <TolboxID> for your toolbox needs % to be defined and also prefferd API for toolbox functions <Preffered_API> % % elseif strcmpi(DL.toolbox,'<ToolboxID>') % % 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; % param=DL.param; % % % - Evaluate the function (DL.name - defined in the main) with % % parameters given above % % D = eval([DL.name,'(<Preffered_API>);']); else % register other toolboxes from the extra plugins folder folders = dir('extra'); extra_plugins = folders(arrayfun(@(x) x.name(1), folders) ~= '.'); extra_plugins = extra_plugins([extra_plugins.isdir]) if length(extra_plugins) > 0 printf('Found %i extra plugin(s) in the extra plugins folder.\n', length(extra_plugins)); for i=1:length(extra_plugins) printf('Initializing extra plugin "%s"', extra_plugins(i).name); %% adds all files from path genpath(['extra/', extra_plugins(i).name]); % open plugin's init file init_file = ['extra/', extra_plugins(i).name, '/init.m']; if ~(exist(init_file == 2) error(['Plugin ', extra_plugins(i).name, ' init file does not exist. Exiting now...']) else % get the correct function handle and run it init_file end end else printf('No extra plugins found.') end printf('\nToolbox has not been registered. Please change SMALL_learn file.\n'); return end %% % 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); end DL.time=tElapsed; % If dictionary is given as a sparse matrix change it to full DL.D = full(D); end