aging_score_autoencoder_agent / extract_weights.py
Ghaithhmz's picture
merge
946b602
"""
Extract weights from .keras file without deserializing the model architecture.
.keras files are ZIP archives containing metadata and weights.
"""
import zipfile
import json
import h5py
import os
import shutil
KERAS_PATH = "./models/aging_score_autoencoder.keras"
WEIGHTS_PATH = "./models/aging_score_autoencoder.weights.h5"
BACKUP_PATH = "./models/aging_score_autoencoder.keras.bak"
print(f"Extracting weights from {KERAS_PATH}...")
if not os.path.exists(KERAS_PATH):
print(f"ERROR: {KERAS_PATH} not found!")
exit(1)
try:
# Backup original
if not os.path.exists(BACKUP_PATH):
shutil.copy(KERAS_PATH, BACKUP_PATH)
print(f"Backed up to {BACKUP_PATH}")
# Extract weights from .keras ZIP
with zipfile.ZipFile(KERAS_PATH, 'r') as zf:
# List contents
files = zf.namelist()
print(f"Files in {KERAS_PATH}: {files}")
# Find the weights file (usually 'model.weights.h5')
weights_file = None
for f in files:
if 'weights' in f.lower() and f.endswith('.h5'):
weights_file = f
break
if weights_file:
print(f"Found weights file: {weights_file}")
# Extract to temp location
with zf.open(weights_file) as src:
with open(WEIGHTS_PATH, 'wb') as dst:
dst.write(src.read())
print(f"Extracted weights to {WEIGHTS_PATH}")
else:
print("ERROR: No .h5 weights file found in archive!")
print(f"Contents: {files}")
exit(1)
print("\nSuccess! Now update app.py to use the weights file.")
print(f"Change MODEL_PATH to: {WEIGHTS_PATH}")
except Exception as e:
print(f"ERROR: {e}")
import traceback
traceback.print_exc()
exit(1)