1
1
import sys , json , os
2
2
import random
3
+ import itertools
3
4
4
5
# ===== Definitions =========================================================
5
6
def expand (Vs , fr , to , soFar ):
6
7
soFarNew = []
7
8
for s in soFar :
8
- print Vs [fr ]
9
9
if (Vs [fr ] == None ):
10
10
print ("ERROR: The order of json inputs and values must be preserved" )
11
11
sys .exit (1 )
@@ -22,7 +22,8 @@ def expand(Vs, fr, to, soFar):
22
22
def generate_random (values , n_samples , benchmarkName ):
23
23
# select '#samples' random numbers between the range provided in settings.json file
24
24
result = ""
25
- for s in range (samples [0 ]):
25
+ param_listed = []
26
+ for s in range (n_samples ):
26
27
if (benchmarkName == "p1b1" ):
27
28
# values = {1:epochs, 2: batch_size, 3: N1, 4: NE}
28
29
t_epoch = random .randint (values [1 ][0 ], values [1 ][1 ])
@@ -61,9 +62,9 @@ def generate_random(values, n_samples, benchmarkName):
61
62
print ('ERROR: Tried all possible benchmarks, Invalid benchmark name or json file' )
62
63
sys .exit (1 )
63
64
# Populate the result string for writing sweep-parameters file
64
- if ( s < ( samples [ 0 ] - 1 )):
65
- result += ": "
66
- return result
65
+ param_listed += [ str ( result )]
66
+ result = " "
67
+ return ( param_listed )
67
68
68
69
# ===== Main program ========================================================
69
70
if (len (sys .argv ) < 3 ):
@@ -75,6 +76,7 @@ def generate_random(values, n_samples, benchmarkName):
75
76
benchmarkName = sys .argv [3 ]
76
77
searchType = sys .argv [4 ]
77
78
79
+ ## Read in the variables from json file
78
80
#Trying to open the settings file
79
81
print ("Reading settings: %s" % settingsFilename )
80
82
try :
@@ -85,7 +87,6 @@ def generate_random(values, n_samples, benchmarkName):
85
87
print ("PWD is: '%s'" % os .getcwd ())
86
88
sys .exit (1 )
87
89
88
- # Read in the variables from json file
89
90
# Register new variables for any benchmark here
90
91
#Common variables
91
92
epochs = settings .get ('parameters' ).get ('epochs' )
@@ -108,41 +109,47 @@ def generate_random(values, n_samples, benchmarkName):
108
109
# For random scheme determine number of samples
109
110
samples = settings .get ('samples' , {}).get ('num' , None )
110
111
112
+ ## Done reading from file
111
113
112
114
# Make values for computing grid sweep parameters
113
115
values = {}
114
116
if (benchmarkName == "p1b1" ):
115
117
values = {1 :epochs , 2 : batch_size , 3 : N1 , 4 : NE }
116
- print values
117
118
elif (benchmarkName == "p1b3" ):
118
119
values = {1 :epochs , 2 : batch_size , 3 : test_cell_split , 4 : drop }
119
- print values
120
120
elif (benchmarkName == "nt3" ):
121
121
values = {1 :epochs , 2 : batch_size , 3 : classes }
122
- print values
123
122
elif (benchmarkName == "p2b1" ):
124
123
values = {1 :epochs , 2 : batch_size , 3 : molecular_epochs , 4 : weight_decay }
125
- print values
126
124
elif (benchmarkName == "p3b1" ):
127
125
values = {1 :epochs , 2 : batch_size , 3 : shared_nnet_spec , 4 : n_fold }
128
- print values
129
126
else :
130
127
print ('ERROR: Tried all possible benchmarks, Invalid benchmark name or json file' )
131
128
sys .exit (1 )
132
129
130
+ # this (result) is : seperated string with all params
133
131
result = {}
132
+ # Determine parameter space based of search type
134
133
if (searchType == "grid" ):
135
134
results = expand (values , 1 , len (values ), ['' ])
136
- result = ':' .join (results )
137
135
elif (searchType == "random" ):
138
136
if (samples == None ):
139
137
print ("ERROR: Provide number of samples in json file" )
140
138
sys .exit (1 )
141
- result = generate_random (values , samples , benchmarkName )
139
+ # result, results = generate_random(values, samples, benchmarkName)
140
+ results = generate_random (values , samples [0 ], benchmarkName )
142
141
else :
143
142
print ("ERROR: Invalid search type, specify either - grid or random" )
144
143
sys .exit (1 )
145
144
145
+ counter = 0
146
+ for a , b in itertools .combinations (results , 2 ):
147
+ if (a == b ):
148
+ print ("Warning: skipping -identical parameters found" , counter )
149
+ results .remove (a )
150
+
151
+ #These are final : seperated parameters for evaluation
152
+ result = ':' .join (results )
146
153
147
154
with open (paramsFilename , 'w' ) as the_file :
148
155
the_file .write (result )
0 commit comments