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) |