-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmodel.py
More file actions
107 lines (74 loc) · 3.31 KB
/
model.py
File metadata and controls
107 lines (74 loc) · 3.31 KB
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import numpy as np
import cv2
from keras.callbacks import ModelCheckpoint,EarlyStopping
from keras.layers import Conv2D, Flatten, MaxPooling2D,Dense,Dropout,SpatialDropout2D
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img, array_to_img
import random,os,glob
import matplotlib.pyplot as plt
dir_path = 'Path of the dataset'
img_list = glob.glob(os.path.join(dir_path, '*/*.jpg'))
print(len(img_list))
# Image Pre Processing
train=ImageDataGenerator(horizontal_flip=True,
vertical_flip=True,
validation_split=0.1,
rescale=1./255,
shear_range = 0.1,
zoom_range = 0.1,
width_shift_range = 0.1,
height_shift_range = 0.1,)
test=ImageDataGenerator(rescale=1/255,
validation_split=0.1)
train_generator=train.flow_from_directory(dir_path,
target_size=(300,300),
batch_size=32,
class_mode='categorical',
subset='training')
test_generator=test.flow_from_directory(dir_path,
target_size=(300,300),
batch_size=32,
class_mode='categorical',
subset='validation')
labels = (train_generator.class_indices)
print(labels)
labels = dict((v,k) for k,v in labels.items())
print(labels)
for image_batch, label_batch in train_generator:
break
image_batch.shape, label_batch.shape
print (train_generator.class_indices)
Labels = '\n'.join(sorted(train_generator.class_indices.keys()))
with open('./labels.txt', 'w') as f:
f.write(Labels)
model=Sequential()
#Convolution blocks
model.add(Conv2D(32,(3,3), padding='same',input_shape=(300,300,3),activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#model.add(SpatialDropout2D(0.5)) # No accuracy
model.add(Conv2D(64,(3,3), padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#model.add(SpatialDropout2D(0.5))
model.add(Conv2D(32,(3,3), padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#Classification layers
model.add(Flatten())
model.add(Dense(64,activation='relu'))
#model.add(SpatialDropout2D(0.5))
model.add(Dropout(0.2))
model.add(Dense(32,activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(6,activation='softmax'))
filepath="./WeightsAndLabels/trained_model.h5"
checkpoint1 = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint1]
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['acc'])
history = model.fit_generator(train_generator,
epochs=100,
steps_per_epoch=4747//32,
validation_data=test_generator,
validation_steps=527//32,
workers = 4,
callbacks=callbacks_list)