-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmodels.py
More file actions
98 lines (68 loc) · 2.67 KB
/
models.py
File metadata and controls
98 lines (68 loc) · 2.67 KB
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
from keras.models import Model
from keras.layers.core import Activation, Flatten, Dense, Dropout
from keras.layers import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.layers import Input
from keras.layers.normalization import BatchNormalization
from keras.regularizers import l2
def standard_conv_block(x, nb_filter, subsample=(1,1), pooling=False, bn=False, dropout_rate=None):
x = Conv2D(nb_filter, (3, 3), padding="same")(x)
if bn:
x = BatchNormalization(mode=2, axis=1)(x)
x = Activation("relu")(x)
if pooling:
x = MaxPooling2D()(x)
if dropout_rate:
x = Dropout(dropout_rate)(x)
return x
def FCN(img_dim, nb_classes, model_name="FCN"):
x_input = Input(shape=img_dim, name="input")
x = Flatten()(x_input)
for i in range(20):
x = Dense(50, activation="relu")(x)
x = Dense(nb_classes, activation="softmax")(x)
FCN = Model(inputs=[x_input], outputs=[x])
FCN.name = model_name
return FCN
def CNN(img_dim, nb_classes, model_name="CNN"):
x_input = Input(shape=img_dim, name="input")
x = standard_conv_block(x_input, 32)
x = standard_conv_block(x, 32, pooling=True, dropout_rate=0.25)
x = standard_conv_block(x, 64)
x = standard_conv_block(x, 64, pooling=True, dropout_rate=0.25)
# FC part
x = Flatten()(x)
x = Dense(512, activation="relu")(x)
x = Dense(nb_classes, activation="softmax")(x)
CNN = Model(inputs=[x_input], outputs=[x])
CNN.name = model_name
return CNN
def Big_CNN(img_dim, nb_classes, model_name="Big_CNN"):
x_input = Input(shape=img_dim, name="input")
x = standard_conv_block(x_input, 64)
x = standard_conv_block(x, 64)
x = standard_conv_block(x, 64, pooling=True, dropout_rate=0.5)
x = standard_conv_block(x, 128)
x = standard_conv_block(x, 128)
x = standard_conv_block(x, 128, pooling=True, dropout_rate=0.5)
x = standard_conv_block(x, 256)
x = standard_conv_block(x, 256)
x = standard_conv_block(x, 256, pooling=True, dropout_rate=0.5)
# FC part
x = Flatten()(x)
x = Dense(512, activation="relu")(x)
x = Dropout(0.5)(x)
x = Dense(512, activation="relu")(x)
x = Dropout(0.5)(x)
x = Dense(nb_classes, activation="softmax")(x)
Big_CNN = Model(inputs=[x_input], outputs=[x])
Big_CNN.name = model_name
return Big_CNN
def load(model_name, img_dim, nb_classes):
if model_name == "CNN":
model = CNN(img_dim, nb_classes, model_name=model_name)
if model_name == "Big_CNN":
model = Big_CNN(img_dim, nb_classes, model_name=model_name)
elif model_name == "FCN":
model = FCN(img_dim, nb_classes, model_name=model_name)
return model