annotate core/magnatagatune/tests_evals/rbm_subspace/Exp_grad.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
rev   line source
wolffd@0 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 2 % Experiment with gradient ascent %
wolffd@0 3 % Project: sub-euclidean distance for music similarity %
wolffd@0 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 5 %% Load features
wolffd@0 6 %feature_file = 'rel_music_raw_features.mat';
wolffd@0 7 feature_file = 'rel_music_raw_features+simdata_ISMIR12.mat';
wolffd@0 8
wolffd@0 9 vars = whos('-file', feature_file);
wolffd@0 10 A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
wolffd@0 11 raw_features = A.(vars(1).name);
wolffd@0 12 indices = A.(vars(2).name);
wolffd@0 13 tst_inx = A.(vars(3).name);
wolffd@0 14 trn_inx = A.(vars(4).name);
wolffd@0 15 %% Params setting
wolffd@0 16 dmr = [0 5 10 20 30 50]; % dimension reduction by PCA
wolffd@0 17 ws = [0 5 10 20 30 50 70]; % window size
wolffd@0 18 % parameters of rbm (if it is used for extraction)
wolffd@0 19 hidNum = 0;
wolffd@0 20 lr_1 = 0;
wolffd@0 21 lr_2 = 0;
wolffd@0 22 mmt = 0;
wolffd@0 23 cost = 0;
wolffd@0 24 %% Select parameters (if grid-search is not applied)
wolffd@0 25 di = 1;
wolffd@0 26
wolffd@0 27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 28 % If grid search is define
wolffd@0 29 % Define directory to save parameters & results
wolffd@0 30 if ~isempty(findstr('WIN',computer()))
wolffd@0 31 dir = 'C:\Pros\Experiments\ISMIR_2013\grad\'; % In windows platform
wolffd@0 32 dlm = '\';
wolffd@0 33 elseif ~isempty(findstr('linux',computer())) || ~isempty(findstr('LNX',computer()))
wolffd@0 34 dir = '/home/funzi/Documents/Experiments/ISMIR_2013/grad/'; % In lunix platform
wolffd@0 35 dlm = '/';
wolffd@0 36 end
wolffd@0 37
wolffd@0 38 EXT_TYPE = 2;
wolffd@0 39 switch (EXT_TYPE)
wolffd@0 40 case 1
wolffd@0 41 dir = strcat(dir,'pca',dlm);
wolffd@0 42 case 2
wolffd@0 43 dir = strcat(dir,'rbm',dlm);
wolffd@0 44
wolffd@0 45 hidNum = [100 500 1000 1200];
wolffd@0 46 lr_1 = [0.5 0.7];
wolffd@0 47 lr_2 = [0.7];
wolffd@0 48 mmt = [0.1];
wolffd@0 49 cost = [0.00002];
wolffd@0 50 otherwise
wolffd@0 51 dir = strcat(dir,'none',dlm);
wolffd@0 52 end
wolffd@0 53
wolffd@0 54 w_num = size(ws,2);
wolffd@0 55
wolffd@0 56 for iiii = 1:200 % set the higher range to search for better features in case of ext using rbm
wolffd@0 57 log_file = strcat(dir,'exp',num2str(iiii),'.mat')
wolffd@0 58 inx = resume_from_grid(log_file,8 + w_num);
wolffd@0 59 if inx(end-w_num+1:end)==ones(1,w_num)
wolffd@0 60 max_= zeros(1,w_num);
wolffd@0 61 else
wolffd@0 62 max_ = inx(end-w_num+1:end);
wolffd@0 63 end
wolffd@0 64
wolffd@0 65 results = zeros(1,w_num);
wolffd@0 66 W_max = cell(1,w_num);
wolffd@0 67 vB_max = cell(1,w_num);
wolffd@0 68 hB_max = cell(1,w_num);
wolffd@0 69 Ws_max = cell(1,w_num);
wolffd@0 70
wolffd@0 71 for hi = inx(1):size(hidNum,2)
wolffd@0 72 for l1i = inx(2):size(lr_1,2)
wolffd@0 73 % for l1i = inx(3):size(lr_2,2)
wolffd@0 74 for mi = inx(4):size(mmt,2)
wolffd@0 75 for ci = inx(5):size(cost,2)
wolffd@0 76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 77 %% Feature extraction
wolffd@0 78 features = raw_features;
wolffd@0 79 switch (EXT_TYPE)
wolffd@0 80 case 1 % Using PCA
wolffd@0 81 assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave');
wolffd@0 82 coeff = princomp(raw_features);
wolffd@0 83 coeff = coeff(:,1:6); % best = 6
wolffd@0 84 features = raw_features*coeff;
wolffd@0 85 % normalizing
wolffd@0 86 mm = minmax(features')';
wolffd@0 87 inn= (find(mm(1,:)~=mm(2,:)));
wolffd@0 88 mm = mm(:,inn);
wolffd@0 89 features = features(:,inn);
wolffd@0 90 features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
wolffd@0 91 case 2 % Using rbm
wolffd@0 92 conf.hidNum = hidNum(hi);
wolffd@0 93 conf.eNum = 100;
wolffd@0 94 conf.sNum = size(raw_features,1);
wolffd@0 95 conf.bNum = 1;
wolffd@0 96 conf.gNum = 1;
wolffd@0 97 conf.params = [lr_1(l1i) lr_1(l1i) mmt(mi) cost(ci)];
wolffd@0 98 conf.N = 50;
wolffd@0 99 conf.MAX_INC = 10;
wolffd@0 100 W1 = zeros(0,0);
wolffd@0 101 [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features);
wolffd@0 102 features = logistic(raw_features*W1 + repmat(hB1,conf.sNum,1));
wolffd@0 103 otherwise
wolffd@0 104 % normalizing
wolffd@0 105 % mm = minmax(features')';
wolffd@0 106 % inn= (find(mm(1,:)~=mm(2,:)));
wolffd@0 107 % mm = mm(:,inn);
wolffd@0 108 % features = features(:,inn);
wolffd@0 109 % features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
wolffd@0 110 end
wolffd@0 111
wolffd@0 112 for wi = inx(6):w_num
wolffd@0 113 %% Sub-euclidean computation
wolffd@0 114 w = ws(wi); % w = subspace window size
wolffd@0 115 num_case = size(trn_inx,1);
wolffd@0 116 [trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,w,0);
wolffd@0 117 [tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,w,0);
wolffd@0 118 cr_ = 0; % correct rate for training
wolffd@0 119 cr = 0; % correct rate for testing
wolffd@0 120 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 121 %% CODE HERE %%
wolffd@0 122 [Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.1,0.1,0.00002);
wolffd@0 123
wolffd@0 124 for i = 1:num_case
wolffd@0 125 cr = cr + sum((tstd_13{i}-tstd_12{i})*Ws{i}' > 0, 1)/size(tstd_12{i},1);
wolffd@0 126 end
wolffd@0 127 cr = cr/num_case;
wolffd@0 128 if cr_>max_(wi)
wolffd@0 129 max_(wi) = cr_;
wolffd@0 130 results(wi) = cr;
wolffd@0 131 if EXT_TYPE==2
wolffd@0 132 W_max{wi} = W1;
wolffd@0 133 vB_max{wi} = vB1;
wolffd@0 134 hB_max{wi} = hB1;
wolffd@0 135 Ws_max{wi} = Ws;
wolffd@0 136 end
wolffd@0 137 end
wolffd@0 138
wolffd@0 139 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 140 fprintf('[window|train|test]= %2d |%f |%f\n',w,cr_,cr);
wolffd@0 141 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 142 % Using the logging function to save paramters
wolffd@0 143 % and the result for plotting or in grid search
wolffd@0 144 switch EXT_TYPE
wolffd@0 145 case 1
wolffd@0 146 % logging(log_file,[100 100 100 100 100 wi cr_ cr max_]);
wolffd@0 147 case 2
wolffd@0 148 logging(log_file,[hi l1i l1i mi ci wi cr_ cr max_ conf.hidNum conf.eNum conf.params]);
wolffd@0 149 otherwise
wolffd@0 150 logging(log_file,[100 100 100 100 100 wi cr_ cr max_]);
wolffd@0 151 end
wolffd@0 152 end
wolffd@0 153 inx(6)=1;
wolffd@0 154 end
wolffd@0 155 inx(5) = 1;
wolffd@0 156 end
wolffd@0 157 inx(4) = 1;
wolffd@0 158 end
wolffd@0 159 inx(2) = 1;
wolffd@0 160 end
wolffd@0 161 inx(1) = 1;
wolffd@0 162 %% Test on best features
wolffd@0 163
wolffd@0 164 save(strcat(dir,'res_',num2str(iiii),'.mat'),'max_','results','W_max','vB_max','hB_max','Ws_max','ws');
wolffd@0 165 [dummy pos] = max(max_);
wolffd@0 166 fprintf('Accuracy (RBM best fts): w = %d train = %f test = %f\n',ws(pos),max_(pos),results(pos));
wolffd@0 167 clc;
wolffd@0 168 end
wolffd@0 169 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 170 clear;