Spaces:
Runtime error
Runtime error
File size: 4,119 Bytes
7d22163 1ae86c6 d14694e 1ae86c6 b7612aa d14694e 1ae86c6 b7612aa d14694e 1ae86c6 b7612aa 1ae86c6 b7612aa 1ae86c6 7d22163 1ae86c6 |
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import streamlit as st
import tensorflow_datasets as tfds
import tensorflow as tf
import numpy as np
import time
import tensorflow.keras as keras
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Model, load_model
from datasets import load_dataset
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import seaborn as sns
from huggingface_hub import HfApi
import os
# π Percorso della cartella dove sarΓ salvato il dataset
DATA_DIR = "/app" #"/tmp"
# π Autenticazione Hugging Face dal Secret nello Space
HF_TOKEN = os.getenv("HF_TOKEN")
if HF_TOKEN:
api = HfApi()
user_info = api.whoami(HF_TOKEN)
if "name" in user_info:
st.write(f"β
Autenticato come {user_info['name']}")
else:
st.warning("β οΈ Token API non valido! Controlla il Secret nello Space.")
else:
st.warning("β οΈ Nessun token API trovato! Verifica il Secret nello Space.")
# π Carica solo 300 immagini da `imagenet_resized/64x64`
st.write("π Caricamento di 300 immagini da `imagenet_resized/64x64`...")
# π Carica il dataset direttamente da Hugging Face
dataset = load_dataset("sradc/imagenet_resized_64x64", split="train")
#Carica il dataset esterno da imagenet
#imagenet = tfds.load("imagenet_resized/64x64", split="train", as_supervised=True, download=True, data_dir=DATA_DIR)
image_list = []
label_list = []
for i, (image, label) in enumerate(imagenet.take(300)): # Prende solo 300 immagini
image = tf.image.resize(image, (224, 224)) / 255.0 # Normalizzazione
image_list.append(image.numpy())
label_list.append(label.numpy())
X_train = np.array(image_list)
y_train = np.array(label_list)
st.write(f"β
Scaricate e preprocessate {len(X_train)} immagini da `imagenet_resized/64x64`!")
# π Caricamento del modello
if os.path.exists("Silva.h5"):
model = load_model("Silva.h5")
st.write("β
Modello `Silva.h5` caricato, nessun nuovo training necessario!")
else:
st.write("π Training in corso perchΓ© `Silva.h5` non esiste...")
# Caricare il modello VGG16 pre-addestrato
base_model = VGG16(weights="imagenet", include_top=False, input_shape=(224, 224, 3))
# Congelare i livelli convoluzionali
for layer in base_model.layers:
layer.trainable = False
# Aggiungere nuovi livelli Dense
x = Flatten()(base_model.output)
x = Dense(256, activation="relu")(x)
x = Dense(128, activation="relu")(x)
output = Dense(len(set(y_train)), activation="softmax")(x)
# Creare il modello finale
model = Model(inputs=base_model.input, outputs=output)
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
# π Barra di progresso del training
progress_bar = st.progress(0)
status_text = st.empty()
start_time = time.time()
# π Addestramento con progress bar
for epoch in range(10):
history = model.fit(X_train, y_train, epochs=1)
progress_bar.progress((epoch + 1) / 10)
elapsed_time = time.time() - start_time
status_text.text(f"β³ Tempo rimanente stimato: {int(elapsed_time / (epoch + 1) * (10 - (epoch + 1)))} secondi")
st.write("β
Addestramento completato!")
# π Salvare il modello
model.save("Silva.h5")
st.write("β
Modello salvato come `Silva.h5`!")
# π Bottone per scaricare il modello
if os.path.exists("Silva.h5"):
with open("Silva.h5", "rb") as f:
st.download_button(
label="π₯ Scarica il modello Silva.h5",
data=f,
file_name="Silva.h5",
mime="application/octet-stream"
)
# π Bottone per caricare il modello su Hugging Face
def upload_model():
api.upload_file(
path_or_fileobj="Silva.h5",
path_in_repo="Silva.h5",
repo_id="scontess/Silva",
repo_type="model"
)
st.success("β
Modello 'Silva' caricato su Hugging Face!")
st.write("π₯ Carica il modello Silva su Hugging Face")
if st.button("π Carica Silva su Model Store"):
upload_model() |