-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcnn.py
66 lines (54 loc) · 1.99 KB
/
cnn.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
# Convolution Neural Network using Keras
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Dropout
classifier = Sequential()
IMAGE_SIZE = 128
EPOCHS = 5
# If the input size is increased, it will require more computing power
classifier.add(Conv2D(32, (3, 3), input_shape=(
IMAGE_SIZE, IMAGE_SIZE, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Second convolution layer
classifier.add(Conv2D(32, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Third convolution layer
classifier.add(Conv2D(64, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Flatten())
# Using units more than 100 gives better results. Convention is to use a power of 2
classifier.add(Dense(activation='relu', units=128))
classifier.add(Dropout(0.5))
# Activation = "sigmoid" for binary if more than two then use softmax
classifier.add(Dense(activation='sigmoid', units=1))
# Loss = "binary_crossentropy" for binary if more than two then use "categorical_crossentropy"
classifier.compile(
optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory(
'../dataset/training_set',
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=32,
class_mode='binary')
test_set = test_datagen.flow_from_directory(
'../dataset/test_set',
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=32,
class_mode='binary')
classifier.fit_generator(
training_set,
steps_per_epoch=8000,
epochs=EPOCHS,
validation_data=test_set,
validation_steps=2000)
# Saving model
classifier.save("model.h5")