Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Addestrare il Modello


Addestramento con Early Stoppong, learning rate
Split del Data Set: Addestramento, test, Validazione

Addestramento delle Reti Neurali


# Callback per l'early stopping per prevenire overfitting
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, min_lr=0.001)

from sklearn.model_selection import train_test_split
# Divisione del dataset in training, validation e test
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, test_size=0.25, random_state=42) # Il 25% del dataset diventa il set di validazione

# Addestramento del modello con validation data
history = model.fit(X_train, y_train, epochs=200, batch_size=32, verbose=2, validation_data=(X_val, y_val), callbacks=[early_stopping, reduce_lr])


Early Stopping e Learning Rate


# Callback per l'early stopping per prevenire overfitting
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, min_lr=0.001)


Queste istruzioni definiscono due callback che possono essere utilizzati durante l'addestramento di un modello neurale per monitorare e gestire l'overfitting:
  • EarlyStopping: Questa callback interromperà l'addestramento del modello se la quantità monitorata (val_loss nel nostro caso) non migliora per un numero specificato di epoche consecutive (patience).
    L'opzione restore_best_weights=True assicura che i pesi del modello vengano ripristinati ai valori migliori quando l'addestramento si interrompe.

  • ReduceLROnPlateau: Questa callback riduce il tasso di apprendimento (learning rate) del modello se la quantità monitorata (val_loss nel nostro caso) non migliora per un numero specificato di epoche consecutive (patience).
    Il tasso di apprendimento viene ridotto moltiplicandolo per un fattore specificato (factor).
    L'opzione min_lr specifica il valore minimo consentito per il tasso di apprendimento.

Entrambe queste callback sono utili per prevenire l'overfitting e migliorare le prestazioni del modello durante l'addestramento.

Split del data set


from sklearn.model_selection import train_test_split
# Divisione del dataset in training, validation e test
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, test_size=0.25, random_state=42) # Il 25% del dataset diventa il set di validazione



Queste istruzioni sono utilizzate per dividere il dataset in tre set distinti: training set, validation set e test set.
Questo tipo di divisione è comune nell'addestramento di modelli di machine learning per valutare le prestazioni del modello e prevenire l'overfitting.
  • from sklearn.model_selection import train_test_split:
    Questa linea importa la funzione train_test_split dal modulo model_selection di Scikit-learn.
    Questa funzione viene utilizzata per suddividere il dataset in set di training e test.

  • X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.2, random_state=42):
    Questa istruzione divide il dataset in due parti: X_train_val, y_train_val (che costituiscono il 80% del dataset) e X_test, y_test (che costituiscono il restante 20% del dataset).
    Il parametro `test_size=0.2` specifica che il 20% del dataset verrà utilizzato per il test.

    Il parametro random_state=42.
    random_state è un parametro che viene utilizzato per inizializzare il generatore di numeri casuali, che a sua volta determina come i dati verranno suddivisi in set di addestramento e set di test o di validazione.
    Quando si imposta random_state su un valore specifico, ad esempio random_state=42, si fissa la sequenza di numeri casuali generati. random_state=42 in una chiamata alla funzione train_test_split, la divisione dei dati sarà la stessa ogni volta che si esegue il codice.

Addestramento


# Addestramento del modello con validation data
history = model.fit(X_train, y_train, epochs=200, batch_size=32, verbose=2, validation_data=(X_val, y_val), callbacks=[early_stopping, reduce_lr])