File size: 3,114 Bytes
372add1
bf98cb1
 
 
 
 
 
372add1
 
 
 
f29d5db
 
372add1
 
f29d5db
 
 
2a854f2
 
 
 
 
 
 
 
 
 
 
 
 
f29d5db
 
 
2a854f2
f29d5db
 
 
 
 
18c9491
 
 
f29d5db
18c9491
 
 
 
f29d5db
18c9491
f29d5db
 
18c9491
f29d5db
18c9491
f29d5db
18c9491
f29d5db
18c9491
 
f29d5db
 
18c9491
f29d5db
18c9491
f29d5db
 
372add1
18c9491
f29d5db
 
 
 
 
 
372add1
18c9491
 
 
 
 
 
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()