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)