Passed
Push — master ( 787200...9cfa33 )
by Simon
01:41
created

enas_example   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 122
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 67
dl 0
loc 122
rs 10
c 0
b 0
f 0

4 Functions

Rating   Name   Duplication   Size   Complexity  
A conv2() 0 4 1
A conv3() 0 2 1
A conv1() 0 5 1
A cnn() 0 37 1
1
from keras.models import Sequential
2
from keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Activation, Dropout
3
from keras.datasets import cifar10
4
from keras.utils import to_categorical
5
6
from hyperactive import Hyperactive
7
8
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
9
10
y_train = to_categorical(y_train, 10)
11
y_test = to_categorical(y_test, 10)
12
13
14
"""
15
Efficient Neural Architecture Search via Parameter Sharing:
16
https://arxiv.org/pdf/1802.03268.pdf
17
"""
18
19
20
def conv1(model):
21
    model.add(Conv2D(32, (3, 3)))
22
    model.add(Activation("relu"))
23
    model.add(MaxPooling2D(pool_size=(2, 2)))
24
    return model
25
26
27
def conv2(model):
28
    model.add(Conv2D(32, (3, 3)))
29
    model.add(Activation("relu"))
30
    return model
31
32
33
def conv3(model):
34
    return model
35
36
37
model_pretrained = Sequential()
38
model_pretrained.add(
39
    Conv2D(64, (3, 3), padding="same", input_shape=X_train.shape[1:])
40
)
41
model_pretrained.add(Activation("relu"))
42
model_pretrained.add(Conv2D(32, (3, 3)))
43
model_pretrained.add(Activation("relu"))
44
model_pretrained.add(MaxPooling2D(pool_size=(2, 2)))
45
model_pretrained.add(Dropout(0.25))
46
47
model_pretrained.add(Conv2D(32, (3, 3), padding="same"))
48
model_pretrained.add(Activation("relu"))
49
model_pretrained.add(Dropout(0.25))
50
51
model_pretrained.add(Flatten())
52
model_pretrained.add(Dense(200))
53
model_pretrained.add(Activation("relu"))
54
model_pretrained.add(Dropout(0.5))
55
model_pretrained.add(Dense(10))
56
model_pretrained.add(Activation("softmax"))
57
58
model_pretrained.compile(
59
    optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]
60
)
61
model_pretrained.fit(X_train, y_train, epochs=50, batch_size=128)
62
63
n_layers = len(model_pretrained.layers)
64
65
for i in range(n_layers-8):
66
    model_pretrained.pop()
67
68
for layer in model_pretrained.layers:
69
    layer.trainable = False
70
71
print(model_pretrained.summary())
72
73
74
def cnn(para, X_train, y_train):
75
    '''
76
    model = Sequential()
77
    model.add(
78
        Conv2D(64, (3, 3), padding="same", input_shape=X_train.shape[1:])
79
    )
80
    model.add(Activation("relu"))
81
    model.add(Conv2D(32, (3, 3)))
82
    model.add(Activation("relu"))
83
84
85
    model.add(MaxPooling2D(pool_size=(2, 2)))
86
    model.add(Dropout(0.25))
87
88
    model.add(Conv2D(32, (3, 3), padding="same"))
89
    model.add(Activation("relu"))
90
    '''
91
    model = model_pretrained
92
93
    model = para["conv_layer.0"](model)
94
    model.add(Dropout(0.25))
95
96
    model.add(Flatten())
97
    model.add(Dense(para["neurons.0"]))
98
    model.add(Activation("relu"))
99
    model.add(Dropout(0.5))
100
    model.add(Dense(10))
101
    model.add(Activation("softmax"))
102
103
    model.compile(
104
        optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]
105
    )
106
    model.fit(X_train, y_train, epochs=25, batch_size=128)
107
108
    loss, score = model.evaluate(x=X_test, y=y_test)
109
110
    return score
111
112
113
search_config = {
114
    cnn: {
115
        "conv_layer.0": [conv1, conv2, conv3],
116
        "neurons.0": range(100, 1000, 100),
117
    }
118
}
119
120
opt = Hyperactive(search_config, n_iter=5)
121
opt.search(X_train, y_train)
122