+1 098новых вакансий за сутки92 474вакансии открыты сейчасНовое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний
model.save() и ?model.save_weights()model.save() сохраняет архитектуру, веса и состояние оптимизатора — модель загружается без исходного кода. model.save_weights() сохраняет только числовые веса — нужна идентичная архитектура при загрузке; используется для transfer learning и checkpointing.
Сохраняет архитектуру, веса, конфигурацию оптимизатора и граф вычислений в единый артефакт. Начиная с TF 2.12, формат по умолчанию — Keras v3 (.keras); также поддерживается SavedModel (директория) и устаревший HDF5 (.h5).
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')
# Тренировка...
# Сохранение в .keras (рекомендуется, TF 2.12+)
model.save('model.keras')
# Загрузка — не нужен исходный код архитектуры
loaded_model = tf.keras.models.load_model('model.keras')
# SavedModel формат (для TF Serving)
model.save('/tmp/my_model', save_format='tf')
Оба метода сохраняют состояние модели, но на принципиально разном уровне абстракции. Выбор между ними определяет, насколько переносима и самодостаточна сохранённая модель.
Сохраняет исключительно числовые значения параметров: kernel и bias каждого слоя. Архитектура не сохраняется. При загрузке модель должна быть воссоздана вручную с идентичной структурой.
# Сохранение только весов
model.save_weights('weights.ckpt') # TF Checkpoint
model.save_weights('weights.h5') # HDF5
# Загрузка: модель нужно создать первой
new_model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
tf.keras.layers.Dense(10, activation='softmax')
])
new_model.build((None, 784)) # обязательно до load_weights
new_model.load_weights('weights.ckpt')
# Transfer learning: загрузка только совпадающих слоёв
new_model.load_weights('weights.ckpt').expect_partial()
В реальных тренировках чаще используют колбэк, который автоматически сохраняет лучшие веса:
checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(
filepath='best_model.keras',
monitor='val_accuracy',
save_best_only=True,
save_weights_only=False # True = аналог save_weights()
)
model.fit(X_train, y_train, validation_split=0.2, callbacks=[checkpoint_cb])
load_model() требует передачи custom_objects={'MyLayer': MyLayer} — иначе ошибка десериализации.save_weights() привязан к имени переменных: переименование слоёв ломает загрузку. Checkpoint ищет переменные по точному имени.save() но не в save_weights() — при возобновлении обучения после save_weights оптимизатор «холодный».model.build() перед load_weights() обязателен, иначе размерности не инициализированы и загрузка упадёт с ошибкой формы.training=True ветки, убедитесь, что сохранена правильная сигнатура.tf.data API и почему он важен для построения эффективных пайплайнов загрузки данных?tf.function и как он улучшает производительность за счёт компиляции графа?tf.keras.Model.compile() — что такое loss, optimizer и metrics?save model vs save weights только синтаксисом без shape, dtype, состояния или режима выполнения.save model vs save weights с реальным контрактом входов и выходов.