diff DL/Majorization Minimization DL/Demo.m @ 155:b14209313ba4 ivand_dev

Integration of Majorization Minimisation Dictionary Learning
author Ivan Damnjanovic lnx <ivan.damnjanovic@eecs.qmul.ac.uk>
date Mon, 22 Aug 2011 11:46:35 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DL/Majorization Minimization DL/Demo.m	Mon Aug 22 11:46:35 2011 +0100
@@ -0,0 +1,45 @@
+clear
+M = 20; % Signal length
+N = 40; % Coefficient Space Dimension
+L = 32*N; % Number of Training Samples
+R = 3; % Sparsity
+IT = 1000; % Number of alternating sparse approximation and dictionary update
+map = 1; % Debiasing. 0 = No, 1 = Yes
+maxIT = 1000; % Inner-loop maximum iteration number.
+lambda = 2*.2; % Lagrangian multiplier.
+epsx = 10^-7; % Stopping criterion for iterative softthresholding
+epsd = 10^-7; % Stopping criterion for MM dictionary update
+cvset = 0; % Dictionary constraint. 0 = Non convex ||d|| = 1, 1 = Convex ||d||<=1
+Tre = .99; % Threshold for accepting too atoms identical
+%%%% Generative Dictionaries
+Do = randn(M,N); % Generative Dictionary
+Do = Do*(diag(sum((Do'*Do).*eye(length(Do))).^-.5)); % Normalization
+%%%% Sparse signal generation %%%%% 
+Xo = zeros(N,L); % Original Sparse Coefficients
+for l = 1:L
+    r = 1;
+    while r<=R
+        ind = fix(rand(1)*N)+ones(1);
+        a = rand(1);
+        if Xo(ind)==0
+            Xo(ind,l) = (.8*rand(1)+.2)*((a>=.5)-(a<.5));
+            r = r+1;
+        end
+    end
+end
+Y = Do*Xo; % Sparse Signals
+%%%% Algorithm initialization
+D = randn(M,N); % Initial Dictionary
+D = D*(diag(sum((D'*D).*eye(length(D))).^-.5)); % Normalization
+X = ones(size(Xo)); % Initial coefficients
+for it = 1:IT,
+    it
+    to = .1+svds(D,1); 
+    [X,cost(it)] = mm1(D,Y,X,to,lambda,maxIT,epsx,map);   
+    plot(cost);
+    [D,X] = dict_update_REG_cn(D,Y,X,maxIT,epsd,cvset);    
+end
+%%%
+success = sum(max(abs((Do'*D)))>=Tre);
+display(['  ------------------'])
+display(['  ',num2str(success),'% of the atoms successfully recovered after ',num2str(IT),' iterations.']);
\ No newline at end of file