Spaces:
Runtime error
Runtime error
File size: 3,384 Bytes
ddfcbfd fea1e17 e9d74ac b1334ad 1b8bf98 bc874f6 1b8bf98 693b541 ccfc76b ea59a8e 1b8bf98 e9d74ac 49e8cd4 2162cdc 49e8cd4 6948230 49e8cd4 1b8bf98 49e8cd4 c3d5e68 49e8cd4 176eb71 49e8cd4 543151b 6adb057 49e8cd4 2162cdc c7e5ac7 39f82d8 082d146 49e8cd4 39f82d8 49e8cd4 ba0af48 1b8bf98 828555f f687da5 828555f 1b8bf98 7305604 d27ee2d 39f82d8 8dcf68e c7e1273 1b8bf98 37d472b 1b8bf98 b1f819b 1b8bf98 |
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 95 96 97 98 99 100 101 102 |
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) |