-
Notifications
You must be signed in to change notification settings - Fork 9
/
classificationCifar.py
90 lines (69 loc) · 2.58 KB
/
classificationCifar.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import scipy.io
import numpy as np
from keras.utils import to_categorical, Sequence
from keras.applications.vgg16 import preprocess_input
from keras.preprocessing.image import load_img, img_to_array
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, Dense, Flatten, BatchNormalization, Activation, Dropout
from keras.callbacks import ModelCheckpoint, EarlyStopping
from keras.optimizers import Adam, SGD, RMSprop
from keras.datasets import cifar100
def CNN(input_size = (224,224,3), nb_classes=120):
inputs = Input(shape = input_size)
output = Conv2D(32, (3,3), padding="same")(inputs)
output = BatchNormalization()(output)
output = Activation("relu")(output)
output = Conv2D(32, (3,3), padding="same")(output)
output = BatchNormalization()(output)
output = Activation("relu")(output)
output = MaxPooling2D(pool_size=(2,2))(output)
output = Dropout(0.25)(output)
output = Conv2D(64, (3,3), padding="same")(output)
output = BatchNormalization()(output)
output = Activation("relu")(output)
output = Conv2D(64, (3,3), padding="same")(output)
output = BatchNormalization()(output)
output = Activation("relu")(output)
output = MaxPooling2D(pool_size=(2,2))(output)
output = Flatten()(output)
output = Dropout(0.25)(output)
output = Dense(512, activation="relu")(output)
output = Dropout(0.5)(output)
output = Dense(nb_classes, activation="softmax")(output)
model = Model(input = inputs, output = output)
return model
filepath = 'weights/class_CNN.h5'
nb_classes = 100
batch_size = 64
epochs = 400
lr = 0.01
trainFactor = 0.8
imageShape = (32,32,3)
(x_train, y_train), (x_test, y_test) = cifar100.load_data()
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
x_train = x_train.astype('float32')/255.0
x_test = x_test.astype('float32')/255.0
### Create and Train the Model
model = CNN(imageShape, nb_classes)
model.summary()
optimizer = SGD()
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=["accuracy"])
model.fit(
x_train,
y_train,
validation_split=1-trainFactor,
epochs=epochs,
verbose=2,
callbacks = [
ModelCheckpoint("temp.h5", monitor='val_loss', verbose=0, save_best_only=True, mode='auto'),
EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='auto')
],
)
model.load_weights("temp.h5")
model.save(filepath)
print("Training done")
### Model Evaluation
result = model.evaluate(x_test, y_test)
print("Normal")
print(result)