-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspec_model.py
64 lines (48 loc) · 1.77 KB
/
spec_model.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
# spec_model.py of EPQ Project
# Copyright James Robinson 2021-2022
# All rights reserved
#
# James Robinson (8116) - The Burgate School and Sixth Form (58815)
from keras import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense
from keras.optimizers import adam_v2
TEST_RATIO, VALIDATE_RATIO = 0.2, 0.2
def gen_model(image_dim=(28, 28, 3)):
num_of_filters = 60
size_of_filter1 = (5, 5)
size_of_filter2 = (3, 3)
size_of_pool = (2, 2)
num_of_nodes = 500
drop = 0.5
# === A safe saved set of SAFE parameters ===
# num_of_filters = 80
# size_of_filter1 = (6, 6)
# size_of_filter2 = (4, 4)
# size_of_pool = (2, 2)
# num_of_nodes = 600
# drop = 0.5
# num_of_filters = 40
# size_of_filter1 = (4, 4)
# size_of_filter2 = (2, 2)
# size_of_pool = (2, 2)
# num_of_nodes = 400
# drop = 0.5
# === Activation Functions ===
# relu, softmax, tanh, sigmoid, softplus
model = Sequential()
model.add((Conv2D(num_of_filters, size_of_filter1, input_shape=(
image_dim[0], image_dim[1], 1), activation='relu')))
model.add((Conv2D(num_of_filters, size_of_filter1, activation='relu')))
model.add(MaxPooling2D(pool_size=size_of_pool))
model.add((Conv2D(num_of_filters // 2, size_of_filter2, activation='relu')))
model.add((Conv2D(num_of_filters // 2, size_of_filter2, activation='relu')))
model.add(MaxPooling2D(pool_size=size_of_pool))
model.add(Dropout(drop))
model.add(Flatten())
model.add(Dense(num_of_nodes, activation='relu'))
model.add(Dropout(drop))
model.add(Dense(10, activation='softmax'))
model.compile(adam_v2.Adam(lr=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
return model