-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.py
81 lines (56 loc) · 2.16 KB
/
utils.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
import os
import uuid
from datetime import datetime
from shutil import copy2
import numpy as np
from tensorflow.keras import backend as KB
def DateToString():
now = datetime.now()
datename = str(now)
return datename.split(" ")[0].replace("-", ".")
def get_kernel(net):
K = []
for l in range(1, len(net.layers)):
if "quantized" not in net.layers[l].name:
continue
k = net.layers[l].get_kernel()
K.append(k)
return K
def copyfilesto(mypath):
if not os.path.exists(mypath):
os.makedirs(mypath)
copy2("localFunctions.py", mypath)
copy2("localLayers.py", mypath)
copy2("QFunctions.py", mypath)
copy2("ResNetBuilder.py", mypath)
copy2("Trainer.py", mypath)
copy2("utils.py", mypath)
def make_outputpath(config):
RunID = uuid.uuid4().hex
basedir = config["basedir"]
mypath = basedir + config['name']
mypath += "/" + config['initializer']
mypath += "/" + RunID[-7:] + "/"
copyfilesto(mypath)
return mypath
def show_activations(network, inputimg):
x = inputimg
inp = network.input # input placeholder
# outputs = [layer.output for layer in network.layers if 'batch_normalization' not in layer.name][1:] # all layer outputs except first (input) layer and batchnorm
outputs = [layer.output for layer in network.layers][1:] # all layer outputs except first (input) layer
names = [layer.name for layer in network.layers][1:] # all layer outputs except first (input) layer
functor = KB.function(inp, outputs) # evaluation function
# Testing
layer_outputvalues = functor([x])
activations = []
for layername, layerout in zip(names, layer_outputvalues):
l = layerout
print("layer:", layername, " act min/max/mean/std/uniq", np.min(l), np.max(l), np.mean(l), np.std(l), np.unique(l).size)
activations.append(l)
def getkernels(net):
weights = []
for l in range(1, len(net.layers)):
if "quantized" in net.layers[l].name:
w = net.layers[l].get_kernel()
weights.append(w)
return weights