]> AND Private Git Repository - these_gilles.git/blob - SFF/Training/ica.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
7 dec
[these_gilles.git] / SFF / Training / ica.m
1 % Sparse Feature Fidelity (SFF)
2 % Training on image samples by ICA
3 % FastICA (Aapo Hyvarinen)
4 % INPUT:
5 % Z  : whitened image patch data
6 % n  : number of independent components to be estimated
7 function W = ica(Z,n)
8
9 %create random initial value of W, and orthogonalize it
10 W = orthogonalizerows(randn(n,size(Z,1))); 
11
12 %read sample size from data matrix
13 N=size(Z,2);
14
15 iter = 0;
16 notconverged = 1;
17
18 while notconverged && (iter<2000) %maximum of 2000 iterations
19     iter=iter+1;
20   
21     % Store old value
22     Wold=W;        
23
24     % Compute estimates of independent components 
25     Y=W*Z; 
26  
27     % Use tanh non-linearity
28     gY = tanh(Y);
29     
30     % This is the fixed-point step. 
31     % Note that 1-(tanh y)^2 is the derivative of the function tanh y
32     W = gY*Z'/N - (mean(1-gY'.^2)'*ones(1,size(W,2))).*W;    
33     
34     % Orthogonalize rows or decorrelate estimated components
35     W = orthogonalizerows(W);
36
37     % Check if converged by comparing change in matrix with small number
38     % which is scaled with the dimensions of the data
39     if norm(abs(W*Wold')-eye(n),'fro') < (1e-8) * n;
40         notconverged=0;
41     end
42     fprintf(' . ')
43 end
44
45
46
47
48
49
50
51