16/11/2025
Î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.

- Metoda 1: Salvarea Completă a Modelului cu model.save()
- Metoda 2: Salvarea Arhitecturii și Greutăților Separat (JSON sau YAML)
- Metoda 3: Salvarea Automată în Timpul Antrenamentului cu callbacks.ModelCheckpoint
- Metoda 4: Formatul Modern TensorFlow SavedModel
- O Notă Despre joblib și Alte Metode Generale de Serializare
- Încărcarea Modelelor Keras: Pașii Inversi
- Reantrenarea și Continuarea Antrenamentului
- Tabel Comparativ: Metode de Salvare Keras
- Întrebări Frecvente (FAQ)
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.

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.

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țiatf.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:
- Încărcați arhitectura:
tf.keras.models.model_from_json(json_string)sautf.keras.models.model_from_yaml(yaml_string). Aceasta va crea o instanță a modelului cu arhitectura specificată, dar fără greutăți antrenate. - Î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ă.
- Încărcați arhitectura:
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ăți | Stare Optim. | Config. Antrenament | Avantaje Cheie | Când se Folosește |
|---|---|---|---|---|---|---|
model.save() (HDF5) | Da | Da | Da | Da | Simplu, complet, permite reluarea antrenamentului. | Majoritatea cazurilor, salvare rapidă și completă. |
model.to_json() / to_yaml() + save_weights() | Da (text) | Da | Nu | Nu | Flexibilitate, arhitectură lizibilă, ușor de modificat. | Necesitatea modificării arhitecturii sau a partajării separate. |
callbacks.ModelCheckpoint | Da (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 SavedModel | Da | Da | Da | Da | Recomandat de TF, universal, pregătit pentru implementare. | Proiecte noi, implementări în producție, interoperabilitate TF. |
joblib / pickle | Parțial | Parțial | Nu | Nu | Salvare 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(),ModelCheckpointcu salvarea întregului model, sau formatul SavedModel), atunci starea optimizatorului este, de asemenea, salvată. La reîncărcare, puteți apela pur și simplumodel.fit()din nou, iar antrenamentul va continua de la punctul de salvare, cu optimizatorul menținându-și starea internă. - Este
joblibo metodă bună pentru salvarea modelelor Keras? - Nu. Deși
joblibpoate 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.
