How to stop a training?

Oprește și Reia Antrenamentul TensorFlow 2

21/07/2022

Rating: 4.14 (6888 votes)

Antrenarea modelelor de învățare profundă poate fi un proces îndelungat, adesea durând ore, zile sau chiar săptămâni, în funcție de complexitatea modelului și de volumul datelor. În acest interval extins, pot apărea diverse situații neprevăzute care pot întrerupe procesul de antrenament: de la căderi de curent și deconectări ale sesiunilor GPU, până la erori de sistem sau pur și simplu necesitatea de a opri antrenamentul pentru a ajusta parametrii. Fără o strategie adecvată pentru a gestiona aceste întreruperi, ore întregi de muncă computațională pot fi pierdute iremediabil. Din fericire, TensorFlow 2, prin intermediul callback-urilor sale puternice, oferă soluții robuste pentru a salva progresul, a opri antrenamentul în mod controlat și a-l relua exact de unde a fost lăsat, permițând chiar și ajustarea din mers a unor hiperparametri critici, cum ar fi rata de învățare. Acest articol explorează în detaliu cum puteți implementa aceste tehnici esențiale pentru a vă asigura că antrenamentele dvs. sunt eficiente, reziliente și controlabile, maximizând astfel performanța modelelor.

How do I stop a training metric?
Stay organized with collections Save and categorize content based on your preferences. Stop training when a monitored metric has stopped improving. Inherits From: Callback Assuming the goal of a training is to minimize the loss. With this, the metric to be monitored would be 'loss', and mode would be 'min'.
Cuprins

De ce este necesar să oprim și să reluăm antrenamentul?

Există două motive principale pentru care ați dori să implementați o strategie de oprire și reluare a antrenamentului pentru modelele dvs. de învățare profundă:

  • Gestionarea întreruperilor neașteptate: Indiferent dacă lucrați pe o mașină locală, pe o instanță GPU în cloud (cum ar fi Google Colab sau Amazon EC2 spot instances) sau pe un server dedicat, riscul unei întreruperi neprevăzute este întotdeauna prezent. O cădere de curent, o deconectare SSH, o eroare de sistem sau o limitare de timp impusă de furnizorul de servicii cloud pot pune capăt brusc sesiunii de antrenament. Fără un mecanism de salvare a progresului, toate calculele efectuate până în acel moment ar fi pierdute. Capacitatea de a salva periodic starea modelului (cunoscută sub numele de checkpointing) vă permite să reluați antrenamentul de la cel mai recent punct de salvare, minimizând pierderile de timp și resurse.
  • Ajustarea manuală a ratei de învățare pentru optimizarea performanței: Un alt motiv crucial este necesitatea de a ajusta rata de învățare în timpul antrenamentului pentru a îmbunătăți precizia modelului. Procesul de antrenament al unei rețele neuronale implică minimizarea unei funcții de pierdere, iar rata de învățare dictează mărimea pașilor făcuți în direcția gradientului. Inițial, o rată de învățare mare poate accelera convergența, dar pe măsură ce modelul se apropie de o soluție optimă, o rată de învățare prea mare poate duce la oscilații sau chiar la divergență. Scăderea ratei de învățare, de obicei cu un ordin de mărime (de exemplu, de la 1e-1 la 1e-2), permite modelului să exploreze mai fin peisajul pierderilor și să se stabilească într-un minim mai bun, îmbunătățind semnificativ performanța finală. Această tehnică, adesea denumită "ctrl + c training", implică oprirea manuală a antrenamentului când performanța stagnează, ajustarea ratei de învățare în cod și reluarea antrenamentului de la ultimul checkpoint.

Rolul ratei de învățare în optimizarea modelului

Rata de învățare este, fără îndoială, unul dintre cei mai influenți hiperparametri în învățarea profundă. O valoare bine aleasă poate accelera convergența și poate îmbunătăți precizia, în timp ce o valoare necorespunzătoare poate duce la o convergență lentă, stagnare sau divergență. De ce este necesară ajustarea sa din mers, având în vedere că există schedulere de rată de învățare?

Deși schedulerele de rată de învățare (cum ar fi ReduceLROnPlateau sau CosineDecay) automatizează procesul de ajustare, ele necesită adesea o estimare prealabilă a numărului de epoci sau a intervalelor în care ar trebui să scadă rata. În etapele incipiente ale experimentării, când nu aveți o idee clară despre hiperparametrii optimi, ajustarea manuală oferă un control mai fin și o flexibilitate sporită. Multe lucrări de referință în domeniul viziunii computerizate menționează că autorii au ajustat manual rata de învățare la anumite epoci pentru a obține cele mai bune rezultate. Când observați că pierderea și precizia modelului încep să se plafoneze, este un semn clar că rata de învățare curentă ar putea fi prea mare și că o reducere ar putea debloca o performanță suplimentară.

Reducerea ratei de învățare permite modelului să iasă din platourile de pierdere și să continue să descindă către minime mai profunde în peisajul de optimizare. Acest lucru se traduce adesea printr-o scădere bruscă a pierderii și o creștere notabilă a preciziei, așa cum se observă în graficele de antrenament după o ajustare. Este crucial să monitorizați constant progresul pentru a evita supra-antrenarea, deoarece o rată de învățare prea mică, combinată cu un antrenament prelungit, poate face ca modelul să memoreze datele de antrenament, pierzându-și capacitatea de generalizare pe date nevăzute.

Cum se oprește antrenamentul în TensorFlow 2 cu EarlyStopping și TimeStopping

TensorFlow 2 oferă callback-uri puternice care permit controlul fin al procesului de antrenament. Două dintre cele mai utile pentru oprirea antrenamentului sunt EarlyStopping și TimeStopping.

EarlyStopping: Oprirea bazată pe performanță

Callback-ul tf.keras.callbacks.EarlyStopping este conceput pentru a opri antrenamentul atunci când o metrică monitorizată încetează să se îmbunătățească. Este extrem de util pentru a preveni supra-antrenarea și pentru a economisi resurse computaționale.

Does TensorFlow/Keras support data augmentation?
2020-06-05 Update: Formerly, TensorFlow/Keras required use of a method called .fit_generator in order to accomplish data augmentation. Now, the .fit method can handle data augmentation as well, making for more-consistent code. This also applies to the migration from .predict_generator to .predict (not used in this example).

Parametri cheie:

  • monitor: Metrica de monitorizat (ex: 'val_loss', 'val_accuracy', 'loss').
  • min_delta: Modificarea minimă în metrica monitorizată pentru a fi considerată o îmbunătățire. Dacă modificarea este mai mică decât min_delta, este considerată lipsă de îmbunătățire.
  • patience: Numărul de epoci fără îmbunătățire după care antrenamentul va fi oprit. De exemplu, dacă patience=3, antrenamentul se va opri după 3 epoci consecutive în care metrica monitorizată nu s-a îmbunătățit.
  • mode: 'auto', 'min' sau 'max'. Definește direcția de îmbunătățire a metricii (ex: 'min' pentru pierdere, 'max' pentru precizie).
  • restore_best_weights: Dacă este True, greutățile modelului de la epoca cu cea mai bună valoare a metricii monitorizate vor fi restaurate la finalul antrenamentului. Aceasta este o funcționalitate crucială pentru a obține cel mai bun model posibil.
  • start_from_epoch: Numărul de epoci de așteptat înainte de a începe monitorizarea îmbunătățirii. Util pentru o perioadă de "încălzire".

Exemplu de utilizare:

import tensorflow as tf from tensorflow import keras callback_early_stopping = keras.callbacks.EarlyStopping( monitor='val_loss', patience=5, restore_best_weights=True ) # model.fit(train_data, train_labels, epochs=50, callbacks=[callback_early_stopping])

TimeStopping: Oprirea bazată pe timp

Callback-ul TimeStopping, disponibil prin tensorflow-addons, permite oprirea antrenamentului după ce a trecut o anumită perioadă de timp. Acesta este ideal pentru situațiile în care aveți un buget de timp limitat pentru antrenament (ex: pe o instanță GPU cu timp limitat).

Pentru a utiliza TimeStopping, trebuie să instalați mai întâi pachetul tensorflow-addons:

pip install tensorflow-addons

Exemplu de utilizare:

import tensorflow_addons as tfa from tensorflow import keras # ... (definirea și compilarea modelului) time_stopping_callback = tfa.callbacks.TimeStopping(seconds=3600, verbose=1) # Oprește după 1 oră # model.fit(train_images, train_labels, epochs=50, callbacks=[time_stopping_callback])

Parametrul seconds specifică durata maximă în secunde înainte ca antrenamentul să fie oprit. verbose=1 va afișa un mesaj atunci când antrenamentul este oprit.

Implementarea salvării și restaurării modelului (Checkpointing)

Pentru a putea relua antrenamentul sau a ajusta rata de învățare, este esențial să salvați periodic starea modelului. TensorFlow oferă callback-ul ModelCheckpoint pentru aceasta, dar pentru un control mai fin, cum ar fi salvarea la fiecare N epoci sau la anumite condiții, se pot implementa callback-uri personalizate, precum EpochCheckpoint menționat în sursa originală.

Un flux tipic pentru salvarea și restaurarea progresului ar implica:

  1. Salvarea periodică a modelului: Utilizați tf.keras.callbacks.ModelCheckpoint pentru a salva modelul după fiecare epocă sau la un interval specific. Acesta permite salvarea întregului model, inclusiv arhitectura, greutățile și starea optimizatorului, într-un fișier HDF5 (.h5 sau .hdf5).
  2. Încărcarea modelului salvat: Când doriți să reluați antrenamentul, utilizați funcția tf.keras.models.load_model() pentru a încărca modelul de la cel mai recent checkpoint.
  3. Ajustarea ratei de învățare: După încărcarea modelului, puteți accesa și modifica rata de învățare a optimizatorului utilizând K.get_value(model.optimizer.lr) pentru a obține valoarea curentă și K.set_value(model.optimizer.lr, new_lr_value) pentru a o seta.

Exemplu de salvare cu ModelCheckpoint:

from tensorflow.keras.callbacks import ModelCheckpoint checkpoint_path = "./training_checkpoints/cp-{epoch:04d}.ckpt" checkpoint_callback = ModelCheckpoint( filepath=checkpoint_path, save_weights_only=False, # Salvează întregul model save_freq='epoch' # Salvează la sfârșitul fiecărei epoci ) # model.fit(..., callbacks=[checkpoint_callback])

Exemplu de încărcare și ajustare a ratei de învățare:

from tensorflow.keras.models import load_model import tensorflow.keras.backend as K # Încărcați modelul de la un checkpoint specific model = load_model("output/checkpoints/epoch_40.hdf5") # Afișați rata de învățare veche print(f"Rata de învățare veche: {K.get_value(model.optimizer.lr)}") # Setați o nouă rată de învățare (ex: o reducere cu un ordin de mărime) K.set_value(model.optimizer.lr, 0.001) # Afișați rata de învățare nouă print(f"Rata de învățare nouă: {K.get_value(model.optimizer.lr)}") # Reluați antrenamentul de la epoca unde a fost salvat checkpoint-ul # Asigurați-vă că 'start_epoch' este setat corect în callback-urile dvs. dacă folosiți altele.

Exemplu practic: Antrenarea Fashion MNIST în faze

Să ilustrăm conceptul de antrenament în faze cu ajustarea ratei de învățare, folosind un exemplu similar cu cel descris în materialul sursă. Vom simula antrenarea unui model pe setul de date Fashion MNIST, împărțind procesul în mai multe etape, fiecare cu o rată de învățare ajustată.

How to stop training in TensorFlow 2?
TensorFlow 2 provides the TimeStopping callback which allows stopping training after a certain amount of time has passed. The TimeStopping callback is provided as TensorFlow add-on. It can be installed using pip package manager from the command line. A package name is tensorflow-addons. We create a model that classifies images.

Faza #1: Rata de învățare inițială (ex: 1e-1)

Începem antrenamentul cu o rată de învățare relativ mare. Modelul converge rapid în această fază, dar performanța (precizia și pierderea) tinde să se plafoneze după un anumit număr de epoci, indicând că modelul are nevoie de ajustări mai fine.

Observații: Pierderea scade rapid la început, iar precizia crește. După aproximativ 20-30 de epoci, se observă o divergență între pierderea de antrenament și cea de validare, sugerând că modelul începe să supra-învețe sau că rata de învățare este prea mare pentru a face progrese semnificative.

Faza #2: Reducerea ratei de învățare (ex: 1e-2)

După ce observăm stagnarea, oprim antrenamentul, ajustăm rata de învățare la o valoare de zece ori mai mică (de la 1e-1 la 1e-2) și reluăm antrenamentul de la ultimul checkpoint salvat.

Observații: Imediat după reluare, se observă o scădere semnificativă a pierderii (atât de antrenament, cât și de validare) și o creștere a preciziei. Modelul este capabil să găsească un minim mai bun. Cu toate acestea, după alte câteva epoci (ex: 10-15 epoci), performanța începe să se plafoneze din nou, indicând necesitatea unei noi ajustări.

How do I use the backupandrestore callback in TensorFlow 2?

Faza #3: Reducerea suplimentară a ratei de învățare (ex: 1e-3)

Pentru a încerca să extragem și mai multă performanță, oprim din nou antrenamentul, reducem rata de învățare la 1e-3 și reluăm. Această fază finală este adesea scurtă, deoarece impactul reducerii ratei de învățare devine din ce în ce mai mic.

Observații: Scăderea pierderii și creșterea preciziei sunt mai puțin dramatice decât în faza anterioară. Modelul face progrese incrementale, dar riscul de supra-antrenare crește semnificativ. Este esențial să se monitorizeze atent pierderea de validare; dacă aceasta începe să crească în timp ce pierderea de antrenament continuă să scadă, este un semn clar de supra-antrenare și antrenamentul ar trebui oprit.

Tabel comparativ al fazelor de antrenament:

FazaRata de ÎnvățareEpoci Antrenate (cumulat)Impact inițial asupra PierderiiImpact inițial asupra PrecizieiRisc Supra-antrenare
11e-10-40Scădere rapidăCreștere rapidăModerat (după platou)
21e-240-50Scădere bruscăCreștere notabilăCrescut
31e-350-55Scădere lentăCreștere incrementalăRidicat

Considerații suplimentare și cele mai bune practici

Deși tehnicile de oprire și reluare a antrenamentului, împreună cu ajustarea manuală a ratei de învățare, sunt extrem de puternice, există câteva aspecte de reținut:

  • Monitorizarea constantă: Este crucial să monitorizați graficele de pierdere și precizie (atât pentru antrenament, cât și pentru validare) în timp real. Aceasta vă va permite să identificați momentele optime pentru a opri antrenamentul și a ajusta rata de învățare.
  • Riscul de supra-antrenare: Fiecare reducere a ratei de învățare permite modelului să exploreze "valleys" mai adânci în peisajul pierderilor. Cu toate acestea, aceste minime locale nu garantează o generalizare mai bună. Dacă pierderea de validare începe să crească în mod constant în timp ce pierderea de antrenament scade, este un semn clar de supra-antrenare.
  • Numărul de reduceri: De obicei, veți putea reduce rata de învățare de 1-3 ori înainte ca beneficiile să devină neglijabile sau riscul de supra-antrenare să devină prea mare. După un anumit punct, rata de învățare devine atât de mică încât actualizările greutăților sunt minuscule, iar modelul nu mai progresează semnificativ.
  • Alternative la ajustarea manuală: Odată ce ați înțeles comportamentul modelului și al datelor, puteți explora schedulere de rată de învățare automate (cum ar fi tf.keras.optimizers.schedules.ExponentialDecay sau tf.keras.optimizers.schedules.CosineDecay) sau tehnici avansate precum Cyclical Learning Rates (CLR), care pot automatiza o parte din acest proces de "tuning".
  • Alți hiperparametri: Dacă, după ajustarea ratei de învățare, modelul dvs. nu atinge performanța dorită, luați în considerare ajustarea altor hiperparametri precum forța regularizării, rata de dropout sau chiar explorarea unor arhitecturi de model diferite.

Întrebări Frecvente (FAQ)

Q: Ce se întâmplă dacă antrenamentul meu se oprește brusc (ex: cădere de curent) și nu am folosit checkpointing?

A: Din păcate, dacă nu ați implementat o strategie de salvare periodică a modelului (checkpointing), tot progresul antrenamentului de la ultima salvare (sau de la început, dacă nu ați salvat deloc) va fi pierdut. Este crucial să folosiți callback-uri precum ModelCheckpoint pentru a preveni acest lucru.

Q: Pot folosi mai multe callback-uri simultan?

A: Da, absolut! Puteți trece o listă de callback-uri metodei model.fit(). De exemplu, puteți folosi EarlyStopping, ModelCheckpoint și un callback personalizat pentru monitorizarea antrenamentului (precum TrainingMonitor din exemplul sursă) în același timp.

How do I use the backupandrestore callback in TensorFlow 2?
With Tensorflow 2 you can now use the BackupAndRestore callback when invoking your model's fit function: model.fit ( train_dataset, validation_data=validation_dataset, epochs=25, callbacks= [ tf.keras.callbacks.BackupAndRestore ( # The path where your backups will be saved.

Q: Este EarlyStopping întotdeauna cea mai bună opțiune pentru a opri antrenamentul?

A:EarlyStopping este excelent pentru a preveni supra-antrenarea și a economisi resurse. Cu toate acestea, depinde de metrica monitorizată și de obiectivele dvs. Dacă aveți un buget de timp strict, TimeStopping ar putea fi mai potrivit. De asemenea, dacă doriți să antrenați pentru un număr fix de epoci, nu este necesar.

Q: Cum aleg valoarea optimă pentru parametrul patience în EarlyStopping?

A: Valoarea patience este un hiperparametru care depinde de setul de date și de model. O valoare mai mică (ex: 2-3) va opri antrenamentul mai repede, dar ar putea rata o îmbunătățire ulterioară. O valoare mai mare (ex: 5-10) permite modelului să exploreze mai mult, dar poate duce la antrenament inutil. Începeți cu valori mici și ajustați-le pe baza observațiilor din graficele de antrenament.

Q: De ce să ajustez manual rata de învățare când există schedulere automate?

A: Ajustarea manuală, deși necesită intervenție, oferă un control mai granular și o înțelegere mai profundă a comportamentului modelului. În fazele inițiale de experimentare sau pentru a extrage ultimul procent de precizie, ajustarea manuală (adesea în combinație cu checkpointing) este o tehnică validă și puternică, folosită chiar și în cercetare de vârf. Schedulerele automate sunt excelente pentru automatizare odată ce ați stabilit un set robust de hiperparametri.

Stăpânirea tehnicilor de oprire și reluare a antrenamentului, alături de ajustarea strategică a ratei de învățare, este o abilitate fundamentală pentru orice practician de învățare profundă. Aceste metode nu numai că protejează investiția de timp și resurse computaționale, dar deschid și calea către optimizarea fină a modelelor, permițându-vă să atingeți performanțe superioare. Prin aplicarea diligentă a acestor practici, veți putea naviga cu încredere prin provocările antrenamentului de modele complexe și veți obține rezultate remarcabile.

Dacă vrei să descoperi și alte articole similare cu Oprește și Reia Antrenamentul TensorFlow 2, poți vizita categoria Fitness.

Go up