|
a |
|
b/training-models/cnn-model.py |
|
|
1 |
# importing dependencies |
|
|
2 |
import tensorflow as tf |
|
|
3 |
from tensorflow.keras.models import Sequential |
|
|
4 |
from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten |
|
|
5 |
from tensorflow.keras.preprocessing.image import ImageDataGenerator |
|
|
6 |
|
|
|
7 |
# training and testing dataset directories path |
|
|
8 |
TRAIN_DATA_PATH = 'X-ray Images/train' |
|
|
9 |
TEST_DATA_PATH = 'X-ray Images/test' |
|
|
10 |
VALID_DATA_Path = 'X-ray Images/validation' |
|
|
11 |
# cnn-model architecture |
|
|
12 |
model = Sequential() |
|
|
13 |
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3))) |
|
|
14 |
model.add(MaxPooling2D((2, 2))) |
|
|
15 |
model.add(Conv2D(64, (3, 3), activation='relu')) |
|
|
16 |
model.add(MaxPooling2D((2, 2))) |
|
|
17 |
model.add(Conv2D(128, (3, 3), activation='relu')) |
|
|
18 |
model.add(MaxPooling2D((2, 2))) |
|
|
19 |
model.add(Flatten()) |
|
|
20 |
model.add(Dense(128, activation='relu')) |
|
|
21 |
model.add(Dropout(0.5)) |
|
|
22 |
model.add(Dense(3, activation='softmax')) |
|
|
23 |
|
|
|
24 |
# compiling the model |
|
|
25 |
model.compile(optimizer='adam', |
|
|
26 |
loss='categorical_crossentropy', |
|
|
27 |
metrics=['accuracy']) |
|
|
28 |
|
|
|
29 |
# data preprocessing |
|
|
30 |
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) |
|
|
31 |
test_datagen = ImageDataGenerator(rescale=1./255) |
|
|
32 |
|
|
|
33 |
training_set = train_datagen.flow_from_directory(TRAIN_DATA_PATH, target_size=(224, 224), batch_size=32, class_mode='categorical') |
|
|
34 |
validation_set = test_datagen.flow_from_directory(VALID_DATA_Path, target_size=(224, 224), batch_size=32, class_mode='categorical') |
|
|
35 |
|
|
|
36 |
# Train the model |
|
|
37 |
history = model.fit(training_set, epochs=10, validation_data=validation_set) |
|
|
38 |
|