Completed
Push — master ( b24ce1...799a98 )
by Simon
04:22 queued 02:04
created

cnn_structure   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 51
dl 0
loc 74
rs 10
c 0
b 0
f 0

4 Functions

Rating   Name   Duplication   Size   Complexity  
A conv1() 0 5 1
A conv2() 0 4 1
A conv3() 0 2 1
A cnn() 0 31 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
def conv1(model):
15
    model.add(Conv2D(32, (3, 3)))
16
    model.add(Activation("relu"))
17
    model.add(MaxPooling2D(pool_size=(2, 2)))
18
    return model
19
20
21
def conv2(model):
22
    model.add(Conv2D(32, (3, 3)))
23
    model.add(Activation("relu"))
24
    return model
25
26
27
def conv3(model):
28
    return model
29
30
31
def cnn(para, X_train, y_train):
32
    model = Sequential()
33
    model.add(
34
        Conv2D(para["filter.0"], (3, 3), padding="same", input_shape=X_train.shape[1:])
35
    )
36
    model.add(Activation("relu"))
37
    model.add(Conv2D(para["filter.0"], (3, 3)))
38
    model.add(Activation("relu"))
39
    model.add(MaxPooling2D(pool_size=(2, 2)))
40
    model.add(Dropout(0.25))
41
42
    model.add(Conv2D(para["filter.0"], (3, 3), padding="same"))
43
    model.add(Activation("relu"))
44
    model = para["layer.0"](model)
45
    model.add(Dropout(0.25))
46
47
    model.add(Flatten())
48
    model.add(Dense(para["layer.0"]))
49
    model.add(Activation("relu"))
50
    model.add(Dropout(0.5))
51
    model.add(Dense(10))
52
    model.add(Activation("softmax"))
53
54
    model.compile(
55
        optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]
56
    )
57
    model.fit(X_train, y_train, epochs=25, batch_size=128)
58
59
    loss, score = model.evaluate(x=X_test, y=y_test)
60
61
    return score
62
63
64
search_config = {
65
    cnn: {
66
        "layers.0": [conv1, conv2, conv3],
67
        "filters.0": [16, 32, 64, 128],
68
        "layer.0": range(100, 1000, 100),
69
    }
70
}
71
72
opt = Hyperactive(search_config, n_iter=5)
73
opt.fit(X_train, y_train)
74