How to save a keras model?

Ghid Complet: Salvarea Modelelor Keras

16/11/2025

Rating: 4.11 (16867 votes)

În lumea dinamică a inteligenței artificiale și a învățării automate, dezvoltarea și antrenarea modelelor complexe, precum cele construite cu Keras, reprezintă o investiție semnificativă de timp și resurse computaționale. Imaginați-vă că ați antrenat o rețea neuronală sofisticată care atinge o performanță remarcabilă. Ar fi inacceptabil să pierdeți această muncă valoroasă! De aceea, capacitatea de a salva modelele Keras după antrenament este absolut crucială. Salvarea unui model permite nu doar implementarea operațională a acestuia, ci și continuarea antrenamentului ulterior, evaluarea performanței sau partajarea cu alți colegi sau echipe. Acest articol explorează în detaliu soluțiile pentru a salva eficient modelele Keras, asigurându-vă că efortul dumneavoastră este păstrat și ușor de reutilizat.

How to return model fit to a history in keras?
Instead, you can save this post to reference later. In Keras, we can return the output of model.fit to a history as follows: history = model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=nb_epoch, validation_data=(X_test, y_test))
Cuprins

Metoda 1: Salvarea Completă a Modelului cu model.save()

Cea mai directă și adesea cea mai convenabilă metodă de a salva un model Keras este utilizarea funcției model.save(). Această funcție este extrem de puternică, deoarece salvează întregul model într-un singur fișier. Mai exact, fișierul generat, de obicei în format HDF5 (cu extensia .h5), va conține următoarele componente esențiale:

  • Arhitectura modelului: Detaliile straturilor, tipurile de neuroni, conexiunile și ordinea acestora.
  • Greutățile modelului: Valorile numerice ale ponderilor și bias-urilor învățate de fiecare neuron în timpul antrenamentului.
  • Configurația de antrenament: Funcția de pierdere (loss function), optimizatorul folosit (de exemplu, Adam, SGD) și metricile utilizate (de exemplu, acuratețe).
  • Starea optimizatorului: Această componentă este vitală dacă intenționați să reluați antrenamentul exact de unde ați rămas. Anumiți optimizatori, cum ar fi Adam sau RMSprop, mențin o stare internă (de exemplu, rate de învățare adaptative) care este necesară pentru a continua antrenamentul fără întreruperi.

Simplitatea acestei metode o face ideală pentru majoritatea scenariilor. Este un „totul într-unul” care garantează că modelul poate fi reîncărcat și utilizat imediat, fie pentru predicții, fie pentru a continua antrenamentul. Fișierul .h5 este un format binar, optimizat pentru stocarea datelor numerice mari, ceea ce îl face eficient pentru greutățile rețelelor neuronale.

Avantaje: Extrem de simplu de utilizat, salvează toate componentele necesare pentru a relua antrenamentul sau a face predicții. Este metoda preferată pentru o persistență rapidă și completă.

Dezavantaje: Fișierul rezultat este binar și nu este ușor de inspectat sau modificat manual. Nu oferă flexibilitate dacă doriți să încărcați greutățile într-o arhitectură ușor modificată.

Metoda 2: Salvarea Arhitecturii și Greutăților Separat (JSON sau YAML)

Uneori, poate fi util să salvați greutățile modelului separat de arhitectură. Această abordare oferă mai multă flexibilitate, mai ales dacă intenționați să modificați ușor arhitectura modelului sau să încărcați greutățile într-un model predefinit. Keras oferă două modalități principale de a salva arhitectura: ca șir de caractere JSON sau YAML.

Salvarea Arhitecturii ca JSON

Funcția model.to_json() serializază arhitectura modelului într-un șir de caractere JSON. Acest șir poate fi apoi salvat într-un fișier text (de obicei cu extensia .json). Ulterior, greutățile modelului sunt salvate separat folosind funcția model.save_weights(), care le stochează într-un fișier HDF5 (de obicei cu extensia .h5).

Această metodă este utilă atunci când doriți să vizualizați sau să editați manual arhitectura modelului, deoarece JSON este un format text lizibil. De asemenea, permite încărcarea greutăților într-o instanță de model creată din JSON sau definită programatic, atâta timp cât arhitectura corespunde.

Salvarea Arhitecturii ca YAML

Similar cu metoda JSON, model.to_yaml() serializază arhitectura modelului într-un șir de caractere YAML. YAML este un alt format de serializare a datelor, adesea preferat pentru lizibilitatea sa și pentru structura sa ierarhică mai intuitivă în comparație cu JSON în anumite cazuri. La fel ca în cazul JSON, greutățile sunt salvate separat cu model.save_weights() într-un fișier HDF5.

Avantaje: Oferă flexibilitate maximă, permițând încărcarea greutăților într-o arhitectură nouă sau modificată. Arhitectura este salvată într-un format text lizibil și ușor de editat manual, ceea ce poate fi util pentru depanare sau ajustări fine.

How can keras help you retrain a model?
Using model.save('filename.h5') or the SavedModel format, Keras makes it simple to secure your progress and share your deep learning innovations. Have you ever had to retrain a model because you didn’t save it? It’s a scenario many developers have faced.

Dezavantaje: Necesită doi pași de salvare și doi pași de încărcare (întâi arhitectura, apoi greutățile). Nu salvează starea optimizatorului sau configurația de antrenament, ceea ce înseamnă că nu puteți relua antrenamentul exact de unde ați rămas fără a reconfigura optimizatorul.

Metoda 3: Salvarea Automată în Timpul Antrenamentului cu callbacks.ModelCheckpoint

Pentru antrenamentele de lungă durată, este esențial să aveți un mecanism de salvare automată care să prevină pierderea progresului în cazul unei întreruperi (de exemplu, o pană de curent, o eroare de sistem). Aici intervine callback-ul ModelCheckpoint din Keras. Acesta este un instrument extrem de puternic care vă permite să salvați modelul la intervale regulate sau să salvați doar cel mai bun model în funcție de o anumită metrică de validare.

ModelCheckpoint poate fi configurat să salveze întregul model (similar cu model.save()) sau doar greutățile. Parametrii cheie includ:

  • filepath: Calea către fișierul în care va fi salvat modelul.
  • save_best_only=True: Dacă este setat la True, callback-ul va salva modelul doar dacă performanța sa pe metrica monitorizată este mai bună decât cea precedentă.
  • monitor='val_loss' sau 'val_accuracy': Metrica pe care o veți monitoriza pentru a determina „cel mai bun” model (de exemplu, pierderea pe setul de validare sau acuratețea pe setul de validare).
  • mode='min' sau 'max': Indică dacă metrica monitorizată trebuie să fie minimizată (pentru pierdere) sau maximizată (pentru acuratețe).
  • save_weights_only=True: Dacă este True, se salvează doar greutățile; altfel, se salvează întregul model.

Această metodă este ideală pentru a asigura reziliența antrenamentului și pentru a obține automat cea mai bună versiune a modelului fără intervenție manuală constantă.

Avantaje: Automatizează procesul de salvare, previne pierderea progresului, salvează cel mai bun model pe baza performanței. Esențial pentru antrenamente lungi și complexe.

Dezavantaje: Necesită o înțelegere a callback-urilor și a metricilor de monitorizare. Dacă nu este configurat corect, poate salva modele mai puțin performante sau poate umple discul cu multe checkpoint-uri.

Metoda 4: Formatul Modern TensorFlow SavedModel

Începând cu TensorFlow 2.x, formatul SavedModel a devenit modalitatea implicită și recomandată de a salva modelele Keras. Spre deosebire de fișierul HDF5 unic, SavedModel salvează modelul într-un director care conține o colecție de fișiere, inclusiv o reprezentare a graficului computațional și greutățile. Acest format este optimizat pentru implementarea în producție și este compatibil cu întregul ecosistem TensorFlow, inclusiv TensorFlow Serving, TensorFlow Lite și TensorFlow.js.

Atunci când apelați model.save() și specificați o cale care este un director (nu un fișier cu extensie .h5), Keras va salva automat modelul în format SavedModel. Acest format capturează nu doar arhitectura și greutățile, ci și informațiile despre optimizator și alte detalii operaționale, permițând o încărcare și o implementare mai robustă.

Avantaje: Recomandat de TensorFlow, universal, scalabil, compatibil cu TensorFlow Serving și alte platforme de implementare. Salvează tot ce este necesar pentru implementare și reantrenare.

Dezavantaje: Rezultatul este un director, nu un singur fișier, ceea ce poate fi uneori mai puțin convenabil pentru transferul simplu. Poate fi mai dificil de inspectat manual decât un fișier JSON/YAML.

How to save a keras model?
Here’s an example: Output: The model is saved as ‘my_model.h5’. The code snippet demonstrates how to define a simple Keras model and save it using the model.save() function. The specified filename is where the model’s details are stored, and the ‘.h5’ extension represents the HDF5 file format used for storage.

O Notă Despre joblib și Alte Metode Generale de Serializare

Există biblioteci Python precum joblib sau pickle care permit serializarea și deserializarea obiectelor Python. Deși acestea pot fi utile pentru salvarea rapidă a unor obiecte Python generale, nu sunt recomandate pentru salvarea modelelor Keras complete.

Motivul principal este că joblib sau pickle salvează obiectul Python așa cum este el în memorie, dar nu sunt conștiente de structura internă complexă a unui model Keras, care include nu doar straturi și greutăți, ci și grafuri computaționale subiacente (TensorFlow Graph, etc.), starea optimizatorului și logica specifică de antrenament. Salvarea unui model Keras cu joblib poate duce la:

  • Pierderea stării optimizatorului, împiedicând reluarea antrenamentului.
  • Probleme de compatibilitate între diferite versiuni de Keras sau TensorFlow.
  • Performanță sub-optimă la încărcare sau chiar erori.

Pentru persistența modelelor Keras, este întotdeauna cel mai bine să folosiți metodele specifice Keras/TensorFlow prezentate mai sus.

Avantaje: Salvare rapidă pentru obiecte Python simple.

Dezavantaje:Nu este recomandat pentru modele Keras complete, deoarece nu salvează corect toate componentele necesare (stare optimizator, graf computațional), ducând la erori sau funcționalitate incompletă la reîncărcare.

Încărcarea Modelelor Keras: Pașii Inversi

Odată ce ați salvat un model, va trebui să știți cum să-l încărcați înapoi în memorie. Metoda de încărcare depinde direct de metoda de salvare utilizată:

  • Pentru modele salvate cu model.save() (format HDF5) sau în format SavedModel: Utilizați funcția tf.keras.models.load_model('calea_catre_model'). Aceasta va reîncărca întregul model, inclusiv arhitectura, greutățile și starea optimizatorului, permițând reluarea antrenamentului.
  • Pentru modele salvate cu arhitectură JSON/YAML și greutăți HDF5:
    1. Încărcați arhitectura: tf.keras.models.model_from_json(json_string) sau tf.keras.models.model_from_yaml(yaml_string). Aceasta va crea o instanță a modelului cu arhitectura specificată, dar fără greutăți antrenate.
    2. Încărcați greutățile: Odată ce aveți instanța modelului, utilizați model.load_weights('calea_catre_greutati.h5') pentru a încărca greutățile antrenate în arhitectura respectivă.

Este crucial să potriviți metoda de încărcare cu metoda de salvare pentru a evita erorile și pentru a asigura că modelul este restaurat corect.

Reantrenarea și Continuarea Antrenamentului

Unul dintre cele mai mari beneficii ale salvării corecte a modelelor Keras este capacitatea de a relua antrenamentul de unde ați rămas, fără a începe de la zero. Dacă ați salvat modelul folosind model.save() sau ModelCheckpoint (cu save_weights_only=False) sau formatul SavedModel, starea optimizatorului este, de asemenea, salvată. Acest lucru înseamnă că, după încărcarea modelului, puteți pur și simplu apela model.fit() din nou, iar antrenamentul va continua cu parametrii optimizatorului exact așa cum erau la momentul salvării.

Pentru a urmări progresul antrenamentului și a decide când să salvați sau să reluați, obiectul history returnat de model.fit() este extrem de util. Acesta conține metrici de performanță (pierdere, acuratețe) pentru fiecare epocă. În scenarii avansate, puteți implementa callback-uri personalizate pentru a salva periodic acest istoric al antrenamentului, alături de model, permițându-vă să vizualizați tendințele și să luați decizii informate chiar și după o întrerupere.

Tabel Comparativ: Metode de Salvare Keras

Acest tabel sumarizează principalele metode de salvare a modelelor Keras, evidențiind ce anume salvează fiecare și când este cel mai bine să le utilizați.

MetodăArhitecturăGreutățiStare Optim.Config. AntrenamentAvantaje CheieCând se Folosește
model.save() (HDF5)DaDaDaDaSimplu, complet, permite reluarea antrenamentului.Majoritatea cazurilor, salvare rapidă și completă.
model.to_json() / to_yaml() + save_weights()Da (text)DaNuNuFlexibilitate, arhitectură lizibilă, ușor de modificat.Necesitatea modificării arhitecturii sau a partajării separate.
callbacks.ModelCheckpointDa (opțional)Da (opțional)Da (dacă salvează tot modelul)Da (dacă salvează tot modelul)Salvare automată, previne pierderi, găsește cel mai bun model.Antrenamente lungi, necesitatea de a relua după întreruperi.
TensorFlow SavedModelDaDaDaDaRecomandat de TF, universal, pregătit pentru implementare.Proiecte noi, implementări în producție, interoperabilitate TF.
joblib / pickleParțialParțialNuNuSalvare rapidă pentru obiecte Python simple.NU PENTRU MODELE KERAS COMPLETE.

Întrebări Frecvente (FAQ)

De ce ar trebui să salvez un model Keras?
Salvarea este esențială pentru a persista munca depusă la antrenament. Permite reutilizarea modelului pentru predicții, implementarea în aplicații, partajarea cu alții sau continuarea antrenamentului ulterior fără a începe de la zero.
Ce se întâmplă dacă salvez doar greutățile modelului?
Dacă salvați doar greutățile (folosind model.save_weights()), veți salva doar parametrii învățați ai rețelei. Pentru a utiliza aceste greutăți, va trebui să definiți sau să încărcați separat arhitectura modelului și apoi să încărcați greutățile în acea arhitectură. Această metodă nu salvează starea optimizatorului, deci nu puteți relua antrenamentul exact de unde ați rămas.
Care este formatul recomandat pentru salvarea modelelor Keras?
Începând cu TensorFlow 2.x, formatul TensorFlow SavedModel este cel mai recomandat. Acesta este robust, compatibil cu întregul ecosistem TensorFlow și ideal pentru implementarea în producție. Funcția model.save() va folosi implicit acest format dacă îi furnizați o cale către un director.
Pot relua antrenamentul unui model Keras de unde am rămas?
Da, dacă ați salvat modelul complet (folosind model.save(), ModelCheckpoint cu salvarea întregului model, sau formatul SavedModel), atunci starea optimizatorului este, de asemenea, salvată. La reîncărcare, puteți apela pur și simplu model.fit() din nou, iar antrenamentul va continua de la punctul de salvare, cu optimizatorul menținându-și starea internă.
Este joblib o metodă bună pentru salvarea modelelor Keras?
Nu. Deși joblib poate serializa obiecte Python, nu este conceput pentru complexitatea internă a modelelor Keras. Utilizarea sa poate duce la pierderea stării optimizatorului, probleme de compatibilitate și erori, împiedicând o încărcare și o reutilizare corectă a modelului. Folosiți întotdeauna metodele specifice Keras/TensorFlow pentru salvarea modelelor.

Dacă vrei să descoperi și alte articole similare cu Ghid Complet: Salvarea Modelelor Keras, poți vizita categoria Fitness.

Go up