-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathvariations.py
102 lines (76 loc) · 2.31 KB
/
variations.py
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import uuid
import os.path
import sklearn
import pandas
import models, stm32convert
def sbcnn_generator(n_iter=400, random_state=1):
from sklearn.model_selection import ParameterSampler
params = dict(
kernel_t = range(3, 10, 2),
kernel_f = range(3, 10, 2),
pool_t = range(2, 5),
pool_f = range(2, 5),
kernels_start = range(16, 64),
fully_connected = range(16, 128),
)
sampler = ParameterSampler(params, n_iter=n_iter, random_state=random_state)
out_models = []
out_total_params = []
for p in sampler:
s = {
'model': 'sbcnn',
'frames': 31,
'n_mels': 60,
'samplerate': 22050,
}
pool = p['pool_f'], p['pool_t']
kernel = p['kernel_f'], p['kernel_t']
for k, v in p.items():
s[k] = v
s['pool'] = pool
s['kernel'] = kernel
yield p, s
def generate_models():
gen = sbcnn_generator()
data = {
'model_path': [],
'gen_path': [],
'id': [],
}
for out in iter(gen):
model = None
try:
params, settings = out
model = models.build(settings.copy())
except ValueError as e:
print('Error:', e)
continue
# Store parameters
for k, v in params.items():
if data.get(k) is None:
data[k] = []
data[k].append(v)
model_id = str(uuid.uuid4())
out_dir = os.path.join('scan', model_id)
os.makedirs(out_dir)
model_path = os.path.join(out_dir, 'model.orig.hdf5')
out_path = os.path.join(out_dir, 'gen')
# Store model
model.save(model_path)
stats = stm32convert.generatecode(model_path, out_path,
name='network', model_type='keras', compression=None)
# Store model info
data['model_path'].append(model_path)
data['gen_path'].append(out_path)
data['id'].append(model_id)
for k, v in stats.items():
if data.get(k) is None:
data[k] = []
data[k].append(v)
df = pandas.DataFrame(data)
return df
def main():
df = generate_models()
df.to_csv('scan.csv')
if __name__ == '__main__':
main()