-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrnn_no_layer_norm.py
108 lines (90 loc) · 2.71 KB
/
rnn_no_layer_norm.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
103
104
105
106
107
import joblib
import numpy as np
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
from tensorflow.keras.models import Model
from tensorflow.keras.layers import (
Input,
Dense,
Dropout,
Conv1D,
Flatten,
Lambda,
Permute,
Multiply,
LSTM,
)
import tensorflow.keras.backend as K
import tensorflow as tf
from activations import Mish
from optimizers import Ranger
import losses as l
import callbacks as cb
from layers import Attention, LayerNormalization
from data import dataset
from generator import generator
strategy = tf.distribute.MirroredStrategy()
data = dataset("data/ninaPro")
reps = np.unique(data.repetition)
val_reps = reps[3::2]
train_reps = reps[np.where(np.isin(reps, val_reps, invert=True))]
test_reps = val_reps[-1].copy()
val_reps = val_reps[:-1]
train = generator(data, list(train_reps))
validation = generator(data, list(val_reps), augment=False)
test = generator(data, [test_reps][0], augment=False)
n_time = train[0][0].shape[1]
n_class = 53
n_features = train[0][0].shape[-1]
model_pars = {
"n_time": n_time,
"n_class": n_class,
"n_features": n_features,
"dense": [500, 500, 2000],
"drop": [0.36, 0.36, 0.36],
}
result = joblib.load("results.dmp")
print(result)
def build(model_fn):
cosine = cb.CosineAnnealingScheduler(
T_max=50, eta_max=1e-3, eta_min=1e-5, verbose=1, epoch_start=5
)
loss = l.focal_loss(gamma=3., alpha=6.)
with strategy.scope():
model = model_fn(**model_pars)
model.compile(Ranger(learning_rate=1e-3), loss=loss, metrics=["accuracy"])
print(model.summary())
return model, cosine
def rnn_model(n_time, n_class, n_features, dense=[50, 50, 50], drop=[0.2, 0.2, 0.2]):
inputs = Input((n_time, n_features))
x = inputs
x = Conv1D(filters=128, kernel_size=3, padding="same", activation=Mish())(x)
x = LSTM(128, activation=Mish())(x)
for d, dr in zip(dense, drop):
x = Dropout(dr)(x)
x = Dense(d, activation=Mish())(x)
outputs = Dense(n_class, activation="softmax")(x)
model = Model(inputs, outputs)
return model
model, cosine = build(rnn_model)
model.fit(
train,
epochs=55,
validation_data=validation,
callbacks=[
ModelCheckpoint(
f"h5/rnn_no_ln.h5",
monitor="val_loss",
keep_best_only=True,
save_weights_only=True,
),
cosine,
],
use_multiprocessing=True,
workers=8,
shuffle = False,
)
result["rnn_no_ln"] = {}
result["rnn_no_ln"]["validation"] = model.evaluate(validation)
result["rnn_no_ln"]["test"] = model.evaluate(test)
print(result)
joblib.dump(result, "results.dmp")