Mercurial > hg > camir-aes2014
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_grad.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,170 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Experiment with gradient ascent % +% Project: sub-euclidean distance for music similarity % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Load features +%feature_file = 'rel_music_raw_features.mat'; +feature_file = 'rel_music_raw_features+simdata_ISMIR12.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); +%% Params setting +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 = 0; +lr_1 = 0; +lr_2 = 0; +mmt = 0; +cost = 0; +%% Select parameters (if grid-search is not applied) + di = 1; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% If grid search is define +% Define directory to save parameters & results +if ~isempty(findstr('WIN',computer())) + dir = 'C:\Pros\Experiments\ISMIR_2013\grad\'; % In windows platform + dlm = '\'; +elseif ~isempty(findstr('linux',computer())) || ~isempty(findstr('LNX',computer())) + dir = '/home/funzi/Documents/Experiments/ISMIR_2013/grad/'; % In lunix platform + dlm = '/'; +end + +EXT_TYPE = 2; +switch (EXT_TYPE) + case 1 + dir = strcat(dir,'pca',dlm); + case 2 + dir = strcat(dir,'rbm',dlm); + + hidNum = [100 500 1000 1200]; + lr_1 = [0.5 0.7]; + lr_2 = [0.7]; + mmt = [0.1]; + cost = [0.00002]; + otherwise + dir = strcat(dir,'none',dlm); +end + +w_num = size(ws,2); + +for iiii = 1:200 % set the higher range to search for better features in case of ext using rbm + log_file = strcat(dir,'exp',num2str(iiii),'.mat') + inx = resume_from_grid(log_file,8 + w_num); + if inx(end-w_num+1:end)==ones(1,w_num) + max_= zeros(1,w_num); + else + max_ = inx(end-w_num+1:end); + end + + results = zeros(1,w_num); + W_max = cell(1,w_num); + vB_max = cell(1,w_num); + hB_max = cell(1,w_num); + Ws_max = cell(1,w_num); + +for hi = inx(1):size(hidNum,2) +for l1i = inx(2):size(lr_1,2) +% for l1i = inx(3):size(lr_2,2) +for mi = inx(4):size(mmt,2) +for ci = inx(5):size(cost,2) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Feature extraction +features = raw_features; +switch (EXT_TYPE) + case 1 % Using PCA + assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave'); + coeff = princomp(raw_features); + coeff = coeff(:,1:6); % best = 6 + 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_1(l1i) 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 = logistic(raw_features*W1 + repmat(hB1,conf.sNum,1)); + otherwise + % 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)); +end + +for wi = inx(6):w_num +%% Sub-euclidean computation +w = ws(wi); % w = subspace window size +num_case = size(trn_inx,1); +[trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,w,0); +[tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,w,0); +cr_ = 0; % correct rate for training +cr = 0; % correct rate for testing +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% CODE HERE %% +[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.1,0.1,0.00002); + +for i = 1:num_case + cr = cr + sum((tstd_13{i}-tstd_12{i})*Ws{i}' > 0, 1)/size(tstd_12{i},1); +end +cr = cr/num_case; +if cr_>max_(wi) + max_(wi) = cr_; + results(wi) = cr; + if EXT_TYPE==2 + W_max{wi} = W1; + vB_max{wi} = vB1; + hB_max{wi} = hB1; + Ws_max{wi} = Ws; + end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +fprintf('[window|train|test]= %2d |%f |%f\n',w,cr_,cr); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using the logging function to save paramters +% and the result for plotting or in grid search +switch EXT_TYPE + case 1 + % logging(log_file,[100 100 100 100 100 wi cr_ cr max_]); + case 2 + logging(log_file,[hi l1i l1i mi ci wi cr_ cr max_ conf.hidNum conf.eNum conf.params]); + otherwise + logging(log_file,[100 100 100 100 100 wi cr_ cr max_]); +end +end +inx(6)=1; +end +inx(5) = 1; +end +inx(4) = 1; +end +inx(2) = 1; +end +inx(1) = 1; +%% Test on best features + +save(strcat(dir,'res_',num2str(iiii),'.mat'),'max_','results','W_max','vB_max','hB_max','Ws_max','ws'); +[dummy pos] = max(max_); +fprintf('Accuracy (RBM best fts): w = %d train = %f test = %f\n',ws(pos),max_(pos),results(pos)); +clc; +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear;