File size: 4,077 Bytes
cbc302e
 
 
7864ee8
cbc302e
 
 
 
 
 
 
 
 
 
 
 
 
8c9ac40
 
 
 
 
f2204fc
 
 
 
 
 
 
 
 
 
 
cbc302e
 
 
 
 
 
 
 
14f6247
cbc302e
 
 
 
14f6247
 
 
 
 
cbc302e
14f6247
 
cbc302e
14f6247
 
cbc302e
 
 
 
 
 
 
 
 
 
 
d006cd4
cbc302e
a62ce83
d006cd4
a62ce83
cbc302e
 
2a52060
 
cbc302e
 
 
 
 
80279b4
cbc302e
80279b4
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import numpy as np
import tensorflow as tf
import pickle
from sklearn.linear_model import LogisticRegression
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import StratifiedShuffleSplit

fashion_mnist = tf.keras.datasets.fashion_mnist.load_data()
(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist
X_train, y_train = X_train_full[:-5000], y_train_full[:-5000]
X_valid, y_valid = X_train_full[-5000:], y_train_full[-5000:]

data_split = StratifiedShuffleSplit(n_splits=1, test_size=0.9, random_state=0) # split data one time into two parts with ratio 10%/90%
for train_index, test_index in data_split.split(X_train, y_train):
    small_x_train, small_y_train = X_train[train_index], y_train[train_index]

class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
               "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

class_labels = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
                'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

# recommended way to save data into image
from PIL import Image
for i in range(6):
  idx = np.random.randint(0,len(X_train_full))
  some_image = X_train_full[idx] # select one image sample
  some_image_label = class_names[y_train_full[idx]] # select one image sample
  some_image = some_image.reshape(28, 28) # reshape from rank-1 tensor (784,) to rank-2 tensor (28,28) 
  im = Image.fromarray(some_image)
  im.save('image'+str(i)+'.jpg')
    
train_size, width, height = small_x_train.shape
small_x_train_reshape = small_x_train.reshape(train_size, width * height)

best_softmax_reg = LogisticRegression(C=0.5, random_state=42)
best_softmax_reg.fit(small_x_train_reshape, small_y_train)

best_nn = MLPClassifier(hidden_layer_sizes=(100, 100), activation='relu', solver='lbfgs')
best_nn.fit(small_x_train_reshape, small_y_train)
'''
input_module1 = gr.Image(label = "test_image", image_mode='L', shape = (28,28))
input_module2 = gr.Dropdown(choices=['Softmax Regression', 'Neural Network (sklearn)'], label = "Select Algorithm")
output_module1 = gr.Textbox(label = "Predicted Class")
output_module2 = gr.Label(label = "Predicted Probability")
'''
input_module1 = gr.Image(label = "test_image", image_mode='L')

# Specify method dropdown menu
input_module2 = gr.Dropdown(choices=['Softmax Regression', 'Neural Network (sklearn)', 'Neural Network (keras) two-layer','Neural Network (keras) three-layer'], label = "Select Algorithm")

# Specify output 1
output_module1 = gr.Textbox(label = "Predicted Class")

# Specify output 2
output_module2 = gr.Label(label = "Predict Probability")



with open('random_forest_model_best.pkl', 'rb') as file:
        best_softmax_reg = pickle.load(file)

best_nn = best_softmax_reg


def fashion_images(input1, input2): # input 1 = image, input 2 = model selection
    numpy_image = input1.reshape(1, 28*28) 
    
    if input2 == 'Softmax Regression':
        probabilities = best_softmax_reg.predict_proba(numpy_image)[0]
    else:
        probabilities = best_nn.predict_proba(numpy_image)[0]
    predicted_class = class_labels[np.argmax(probabilities)]

    print("probabilities: ",probabilities)
    print("class_labels: ",class_labels)
    predicted_probabilities = {class_label: float(prob) for class_label, prob in zip(class_labels, probabilities)}

    return predicted_class, predicted_probabilities


# Step 6.4: Put all three component together into the gradio's interface function 
gr.Interface(fn=fashion_images, 
             inputs=[input_module1, input_module2], 
             outputs=[output_module1,output_module2],
             title = "CSCI4750/5750: Build classification pipeline for FashionMNIST",
             examples=[["image0.jpg", "Random Forest"], 
                       ["image1.jpg", "Decision tree"], 
                       ["image2.jpg", "Random Forest"], 
                       ["image3.jpg", "Gradient Tree Boosting"], 
                       ["image4.jpg", "AdaBoost"], 
                       ["image5.jpg", "Random Forest"]]
            ).launch(debug = True)