-
Notifications
You must be signed in to change notification settings - Fork 2
/
hyperparameters_grid.m
66 lines (66 loc) · 3.15 KB
/
hyperparameters_grid.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function grid = hyperparameters_grid(model, optimize, type, nbTrials)
grid = [];
switch type
case 'structure'
% Construct an evaluation grid
cellVals = cell(model.nbLayers - 2, 1);
gridStr = ''; gridOut = '';
for i = 2:model.nbLayers-1
minVal = num2str(optimize.structure.units.values(1));
maxVal = num2str(optimize.structure.units.values(end));
step = num2str(optimize.structure.units.step);
gridStr = strcat(gridStr, [minVal ':' step ':' maxVal ',']);
gridOut = strcat(gridOut, ['cellVals{' num2str(i - 1) '},']);
end
eval([ '[' gridOut(1:end-1) '] = ndgrid(' gridStr(1:end-1) ');' ]);
for i = 2:model.nbLayers-1
grid = [grid cellVals{i-1}(:)];
end
case 'full'
names = [optimize.pretrainNames optimize.trainNames];
grid = zeros(nbTrials, length(names));
% Fill the grid with a wide set of random configurations
for i = 1:length(optimize.pretrainNames)
if (optimize.pretrainContinuous(i))
grid(:, i) = rand(nbTrials, 1) * (optimize.pretrainValues{i}(end) - optimize.pretrainValues{i}(1));
grid(:, i) = grid(:, i) + optimize.pretrainValues{i}(1);
else
grid(:, i) = optimize.pretrainValues{i}(randi(length(optimize.pretrainValues{i})));
end
end
for i = 1:length(optimize.trainNames)
if (optimize.trainContinuous(i))
grid(:, i + length(optimize.pretrainNames)) = rand(nbTrials, 1) * (optimize.trainValues{i}(end) - optimize.trainValues{i}(1));
grid(:, i + length(optimize.pretrainNames)) = grid(:, i + length(optimize.pretrainNames)) + optimize.trainValues{i}(1);
else
grid(:, i + length(optimize.pretrainNames)) = optimize.trainValues{i}(randi(length(optimize.trainValues{i})));
end
end
case 'pretrain'
names = optimize.pretrainNames;
grid = zeros(nbTrials, length(names));
% Fill the grid with a wide set of random configurations
for i = 1:length(optimize.pretrainNames)
if (optimize.pretrainContinuous(i))
grid(:, i) = rand(nbTrials, 1) * (optimize.pretrainValues{i}(end) - optimize.pretrainValues{i}(1));
grid(:, i) = grid(:, i) + optimize.pretrainValues{i}(1);
else
grid(:, i) = optimize.pretrainValues{i}(randi(length(optimize.pretrainValues{i})));
end
end
case 'train'
names = optimize.trainNames;
grid = zeros(nbTrials, length(names));
% Fill the grid with a wide set of random configurations
for i = 1:length(optimize.trainNames)
if (optimize.trainContinuous(i))
grid(:, i) = rand(nbTrials, 1) * (optimize.trainValues{i}(end) - optimize.trainValues{i}(1));
grid(:, i) = grid(:, i) + optimize.trainValues{i}(1);
else
grid(:, i) = optimize.trainValues{i}(randi(length(optimize.trainValues{i})));
end
end
otherwise
error(['Unknown grid type ' type ' for hyperparameters.']);
end
end