Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import tensorflow as tf | |
| import numpy as np | |
| import os | |
| import PIL | |
| import PIL.Image | |
| # Create a Gradio App using Blocks | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| # AI/ML Playground | |
| """ | |
| ) | |
| with gr.Accordion("Click for Instructions:"): | |
| gr.Markdown( | |
| """ | |
| * uploading an image will engage the model in image classsification | |
| * trained on the following image types: 'T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot' | |
| * Only accepts images 28x28. Trained on images with a black background. | |
| """) | |
| # Train, evaluate and test a ML | |
| # image classification model for | |
| # clothes images | |
| class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', | |
| 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'] | |
| # clothing dataset | |
| mnist = tf.keras.datasets.fashion_mnist | |
| #split the training data in to a train/test sets | |
| (x_train, y_train), (x_test, y_test) = mnist.load_data() | |
| x_train, x_test = x_train / 255.0, x_test / 255.0 | |
| # create the neural net layers | |
| model = tf.keras.models.Sequential([ | |
| tf.keras.layers.Flatten(input_shape=(28, 28)), | |
| tf.keras.layers.Dense(128, activation='relu'), | |
| tf.keras.layers.Dropout(0.2), | |
| tf.keras.layers.Dense(10) | |
| ]) | |
| #make a post-training predition on the | |
| #training set data | |
| predictions = model(x_train[:1]).numpy() | |
| # converts the logits into a probability | |
| tf.nn.softmax(predictions).numpy() | |
| #create and train the loss function | |
| loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) | |
| loss_fn(y_train[:1], predictions).numpy() | |
| # compile the model with the loss function | |
| model.compile(optimizer='adam', | |
| loss=loss_fn, | |
| metrics=['accuracy']) | |
| # train the model - 5 runs | |
| # evaluate the model on the test set | |
| model.fit(x_train, y_train, epochs=5, validation_split=0.3) | |
| test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2) | |
| post_train_results = f"Test accuracy: {test_acc} Test Loss: {test_loss}" | |
| print(post_train_results) | |
| # create the final model for production | |
| probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()]) | |
| def classifyImage(img): | |
| # Normalize the pixel values | |
| img = np.array(img) / 255.0 | |
| input_array = np.expand_dims(img, axis=0) # add an extra dimension to represent the batch size | |
| # Make a prediction using the model | |
| prediction = probability_model.predict(input_array) | |
| # Postprocess the prediction and return it | |
| predicted_label = class_names[np.argmax(prediction)] | |
| return predicted_label | |
| def do_nothing(): | |
| pass | |
| # Creates the Gradio interface objects | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| image_data = gr.Image(label="Upload Image", type="numpy", image_mode="L") | |
| with gr.Column(scale=1): | |
| model_prediction = gr.Text(label="Model Prediction", interactive=False) | |
| image_data.upload(classifyImage, image_data, model_prediction) | |
| image_data.clear(do_nothing, [], model_prediction) | |
| # creates a local web s | |
| # if share=True creates a public | |
| # demo on huggingface.c | |
| demo.launch(share=False) |