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