File size: 2,978 Bytes
372add1
bf98cb1
 
 
 
 
 
372add1
 
 
 
f29d5db
 
372add1
 
f29d5db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372add1
f29d5db
 
 
 
 
 
 
372add1
f29d5db
 
 
 
 
 
372add1
 
 
 
 
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
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.preprocessing.image import ImageDataGenerator

import matplotlib.pyplot as plt


import gradio as gr


def classify_image(inp):
    # Dataset link: https://www.kaggle.com/pranavraikokte/covid19-image-dataset


#import app


batch = 4

generator = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

train_iterator = generator.flow_from_directory("C:/Users/Lyall Stewart/Documents/Coding/NeuralNetwork/COVID-19 Classification/data/train",
                                               batch_size=batch,
                                               color_mode='grayscale',
                                               class_mode='sparse')
test_iterator = generator.flow_from_directory("C:/Users/Lyall Stewart/Documents/Coding/NeuralNetwork/COVID-19 Classification/data/test",
                                              batch_size=batch,
                                              color_mode='grayscale',
                                              class_mode='sparse')


def design_model():
    model = Sequential()
    model.add(tf.keras.Input(shape=(256, 256, 1)))

    model.add(tf.keras.layers.Conv2D(2, 5, strides=3, activation="relu"))
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(5, 5), strides=(5,5)))
    model.add(tf.keras.layers.Conv2D(4, 3, strides=1, activation="relu"))
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(3,2), strides=(2,2)))

    model.add(tf.keras.layers.Flatten())
    #model.add(tf.keras.layers.Dense(8, activation="relu"))
    #model.add(tf.keras.layers.Dropout(.20))
    model.add(tf.keras.layers.Dense(4, activation='softmax'))

    model.summary()

    callback = tf.keras.callbacks.EarlyStopping(monitor='accuracy', patience=5, restore_best_weights=True, verbose=1)

    print("Model designed")
    return model, callback


model, es_callback = design_model()

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=keras.optimizers.Adam(learning_rate=0.01),
              metrics=['accuracy'])

history = model.fit_generator(train_iterator,
                              epochs=50,
                              steps_per_epoch=50,
                              validation_data=test_iterator,
                              validation_steps=50,
                              callbacks=[es_callback],
                              verbose=1)

plt.plot(history.history['accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train'], loc='upper left')
plt.show()

title = "Gradio Image Classifiction + Interpretation Example"
gr.Interface(
    fn=classify_image, inputs=image, outputs=label, interpretation="default", title=title
).launch()