Mercurial > hg > camir-aes2014
diff core/magnatagatune/tests_evals/rbm_subspace/Exp_normalise_deltas.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_normalise_deltas.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,125 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Experiment code templat % +% Project: sub-euclidean distance for music similarity, +% in the last part all the +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Load features +feature_file = 'rel_music_raw_features.mat'; +vars = whos('-file', feature_file); +A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name); +raw_features = A.(vars(1).name); +indices = A.(vars(2).name); +tst_inx = A.(vars(3).name); +trn_inx = A.(vars(4).name); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Define directory to save parameters & results +% dir = '/home/funzi/Documents/'; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +dmr = [0 5 10 20 30 50]; % dimension reduction by PCA +ws = [0 5 10 20 30 50 70]; % window size +% parameters of rbm (if it is used for extraction) +hidNum = [30 50 100 500]; +lr_1 = [0.05 0.1 0.5]; +lr_2 = [0.1 0.5 0.7]; +mmt = [0.02 0.05 0.1]; +cost = [0.00002 0.01 0.1]; + +%% Select parameters (if grid-search is not applied) +di = 1; +wi = 1; +hi = 1; +l1i = 1; +l2i = 1; +mi = 1; +ci = 1; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% If grid search is define +% log_file = strcat(dir,'exp_.mat'); +% inx = resume_from_grid(log_file,8); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Feature extraction +EXT_TYPE = 2; +switch (EXT_TYPE) + case 1 % Using PCA + assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave'); + coeff = princomp(raw_features); + coeff = coeff(:,1:end-dmr(di)); % Change value of dmr(di) to reduce the dimensionality + features = raw_features*coeff; + % normalizing + mm = minmax(features')'; + inn= (find(mm(1,:)~=mm(2,:))); + mm = mm(:,inn); + features = features(:,inn); + features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1)); + case 2 % Using rbm + conf.hidNum = hidNum(hi); + conf.eNum = 100; + conf.sNum = size(raw_features,1); + conf.bNum = 1; + conf.gNum = 1; + conf.params = [lr_1(l1i) lr_2(l2i) mmt(mi) cost(ci)]; + conf.N = 50; + conf.MAX_INC = 10; + W1 = zeros(0,0); + [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features); + features = raw_features*W1 + repmat(hB1,conf.sNum,1); +end + +%% Sub-euclidean computation +num_case = size(trn_inx,1); +trnd_12 = cell(1,num_case); +trnd_13 = cell(1,num_case); +tstd_12 = cell(1,num_case); +tstd_13 = cell(1,num_case); + +w = ws(wi); + +% w = subspace window size +if w == 0 % trnd_12 = d(a,b) , trnd_13= d(a,c) + for i = 1:num_case % over all cross-validation folds (num_case) + [trnd_12{i} trnd_13{i}] = simple_dist(trn_inx{i},features,indices); + [tstd_12{i} tstd_13{i}] = simple_dist(tst_inx{i},features,indices); + end +else + for i = 1:num_case % for w > 1 + [trnd_12{i} trnd_13{i}] = conv_euclidean_dist(trn_inx{i},features,indices,w,1); %% normalize is better than no normalize + [tstd_12{i} tstd_13{i}] = conv_euclidean_dist(tst_inx{i},features,indices,w,1); + end +end +%% Data preparation +trn_dat1 = cell(1,num_case); +trn_dat2 = cell(1,num_case); +tst_dat1 = cell(1,num_case); +tst_dat2 = cell(1,num_case); + +for i=1:num_case + %=> Compute hypothesis + trn_dat1{i} = trnd_13{i} - trnd_12{i}; + trn_dat2{i} = trnd_12{i} - trnd_13{i}; + tst_dat1{i} = tstd_13{i} - tstd_12{i}; + tst_dat2{i} = tstd_12{i} - tstd_13{i}; + + + % --- + % Cheat: Normalize over all training and test delta values using min-max + % Son reports this can give about 95% accuracy + % --- + + mm = minmax([trn_dat1{i};tst_dat1{i}]')'; + inn= find(mm(1,:)~=mm(2,:)); + mm = mm(:,inn); + trn_dat1{i} = + (trn_dat1{i}(:,inn)-repmat(mm(1,:),size(trn_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat1{i},1),1); + tst_dat1{i} = (tst_dat1{i}(:,inn)-repmat(mm(1,:),size(tst_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat1{i},1),1); + + mm = minmax([trn_dat2{i};tst_dat2{i}]'); + inn= find(mm(1,:)~=mm(2,:)); + mm = mm(:,inn); + trn_dat2{i} = + (trn_dat2{i}(:,inn)-repmat(mm(1,:),size(trn_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat2{i},1),1); + tst_dat2{i} = (tst_dat2{i}(:,inn)-repmat(mm(1,:),size(tst_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat2{i},1),1); + + + + +end