-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathutils_models.py
72 lines (63 loc) · 3.01 KB
/
utils_models.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
from tensorflow import keras
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Lambda, Conv2D, Dropout, Flatten, Dense
from tensorflow.keras.regularizers import l2
from ThirdEye.ase22.utils import INPUT_SHAPE
def build_model(model_name, use_dropout=False):
"""
Retrieve the DAVE-2 NVIDIA model
"""
model = None
if "dave2" in model_name:
model = create_dave2_model(use_dropout)
else:
print("Incorrect model name provided")
exit()
assert model is not None
model.summary()
return model
def create_dave2_model(use_dropout=False):
"""
Modified NVIDIA model w/ Dropout layers
"""
if use_dropout:
inputs = keras.Input(shape=INPUT_SHAPE)
lambda_layer = keras.layers.Lambda(lambda x: x / 127.5 - 1.0, name="lambda_layer")(inputs)
x = keras.layers.Conv2D(24, (5, 5), activation='relu', strides=(2, 2), kernel_regularizer=l2(1.0e-6))(
lambda_layer)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Conv2D(36, (5, 5), activation='relu', strides=(2, 2), kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Conv2D(48, (5, 5), activation='relu', strides=(2, 2), kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Flatten()(x)
x = keras.layers.Dense(100, activation='relu', kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Dense(50, activation='relu', kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
x = keras.layers.Dense(10, activation='relu', kernel_regularizer=l2(1.0e-6))(x)
x = keras.layers.Dropout(rate=0.05)(x, training=True)
outputs = keras.layers.Dense(1)(x)
model = keras.Model(inputs=inputs, outputs=outputs)
else:
"""
original NVIDIA model w/out Dropout layers
"""
model = Sequential()
model.add(Lambda(lambda x: x / 127.5 - 1.0, input_shape=INPUT_SHAPE))
model.add(Conv2D(24, (5, 5), activation='elu', strides=(2, 2)))
model.add(Conv2D(36, (5, 5), activation='elu', strides=(2, 2)))
model.add(Conv2D(48, (5, 5), activation='elu', strides=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='elu'))
model.add(Conv2D(64, (3, 3), activation='elu'))
model.add(Dropout(rate=0.05))
model.add(Flatten())
model.add(Dense(100, activation='elu'))
model.add(Dense(50, activation='elu'))
model.add(Dense(10, activation='elu'))
model.add(Dense(1))
return model