-
Notifications
You must be signed in to change notification settings - Fork 9
/
cnn_multiclass.py
52 lines (42 loc) · 2.13 KB
/
cnn_multiclass.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
from keras.models import Sequential
from keras.models import load_model
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.preprocessing.image import ImageDataGenerator
from IPython.display import display
from PIL import Image
import h5py
# CNN model
classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 10, activation = 'softmax')) # number of classes
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
# Data Augmentation
batch_size = 32
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
rotation_range = 20,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('training_set',
target_size = (64, 64),
batch_size = batch_size,
class_mode = 'categorical')
test_set = test_datagen.flow_from_directory('test_set',
target_size = (64, 64),
batch_size = batch_size,
class_mode = 'categorical')
classifier.fit_generator(training_set,
steps_per_epoch = 729 // batch_size, # number of training set images, 729
epochs = 1,
validation_data = test_set,
validation_steps = 229 // batch_size) # number of test set images, 229
classifier.save('my_model_multiclass10.h5') #save model