EdoAbati's picture
updated model location
95bab90
from functools import partial
from typing import Dict
import gradio as gr
import numpy as np
import plotly.graph_objects as go
from huggingface_hub import from_pretrained_keras
ROOT_DATA_URL = "https://raw.githubusercontent.com/hfawaz/cd-diagram/master/FordA"
TRAIN_DATA_URL = f"{ROOT_DATA_URL}/FordA_TRAIN.tsv"
TEST_DATA_URL = f"{ROOT_DATA_URL}/FordA_TEST.tsv"
TIMESERIES_LEN = 500
CLASSES = {"Symptom does NOT exist", "Symptom exists"}
model = from_pretrained_keras("keras-io/timeseries-classification-from-scratch")
# Read data
def read_data(file_url: str):
data = np.loadtxt(file_url, delimiter="\t")
y = data[:, 0]
x = data[:, 1:]
return x, y.astype(int)
x_train, y_train = read_data(file_url=TRAIN_DATA_URL)
x_test, y_test = read_data(file_url=TEST_DATA_URL)
# Helper functions
def get_prediction(row_index: int, data: np.ndarray) -> Dict[str, float]:
x = data[row_index].reshape((1, TIMESERIES_LEN, 1))
predictions = model.predict(x).flatten()
return {k: float(v) for k, v in zip(CLASSES, predictions)}
def create_plot(row_index: int, dataset_name: str) -> go.Figure:
x = x_train
row = x[row_index]
scatter = go.Scatter(
x=list(range(TIMESERIES_LEN)),
y=row.flatten(),
mode="lines+markers",
)
fig = go.Figure(data=scatter)
fig.update_layout(title=f"Timeseries in row {row_index} of {dataset_name} set ")
return fig
def show_tab_section(data: np.ndarray, dataset_name: str):
num_indexes = data.shape[0]
index = gr.Slider(
maximum=num_indexes - 1,
label="Select the index of the row you want to classify:",
)
button = gr.Button("Predict")
plot = gr.Plot()
create_plot_data = partial(create_plot, dataset_name=dataset_name)
button.click(create_plot_data, inputs=[index], outputs=[plot])
get_prediction_data = partial(get_prediction, data=data)
label = gr.Label()
button.click(get_prediction_data, inputs=[index], outputs=[label])
# Gradio Demo
title = "# Timeseries classification from scratch"
description = """
Select a time series in the Training or Test dataset and ask the model to classify it!
<br />
<br />
The model was trained on the <a href="http://www.j-wichard.de/publications/FordPaper.pdf" target="_blank">FordA dataset</a>. Each row is a diagnostic session run on an automotive subsystem. In each session 500 samples were collected. Given a time series, the model was trained to identify if a specific symptom exists or it does not exist.
<br />
<br />
<p>
<b>Model:</b> <a href="https://huggingface.co/keras-io/timeseries-classification-from-scratch" target="_blank">https://huggingface.co/keras-io/timeseries-classification-from-scratch</a>
<br />
<b>Keras Example:</b> <a href="https://keras.io/examples/timeseries/timeseries_classification_from_scratch/" target="_blank">https://keras.io/examples/timeseries/timeseries_classification_from_scratch/</a>
</p>
<br />
"""
article = """
<div style="text-align: center;">
Space by <a href="https://github.com/EdAbati" target="_blank">Edoardo Abati</a>
<br />
Keras example by <a href="https://github.com/hfawaz/" target="_blank">hfawaz</a>
</div>
"""
demo = gr.Blocks()
with demo:
gr.Markdown(title)
gr.Markdown(description)
with gr.Tabs():
with gr.TabItem("Training set"):
show_tab_section(data=x_train, dataset_name="Training")
with gr.TabItem("Test set"):
show_tab_section(data=x_test, dataset_name="Test")
gr.Markdown(article)
demo.launch(enable_queue=True)