Mô tả
Tạo model mới, load latest checkpoint weights, re-evaluate. Minh họa workflow resume training / inference từ checkpoint.
Code ví dụ
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
import os
def create_model():
model = keras.Sequential([
layers.Dense(64, activation='relu', input_shape=(784,)),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
# Dummy data
x_test = np.random.rand(200, 784).astype('float32')
y_test = np.random.randint(0, 10, 200)
# Giả sử đã train và save checkpoints vào 'checkpoints/'
# checkpoint_path = "checkpoints/cp-{epoch:04d}.ckpt"
# 1. TẠO MODEL MỚI (CÙNG KIẾN TRÚC)
model = create_model()
print("A new model instance is created")
# 2. TÌM LATEST CHECKPOINT
checkpoint_dir = 'checkpoints'
latest = tf.train.latest_checkpoint(checkpoint_dir)
print(f"Latest checkpoint: {latest}")
if latest:
# 3. LOAD WEIGHTS
model.load_weights(latest)
print("Previously saved weights loaded")
# 4. RE-EVALUATE
print("Re-evaluating model...")
loss, acc = model.evaluate(x_test, y_test, verbose=0)
print(f"Restored model - Loss: {loss:.4f}, Accuracy: {acc:.4f} ({acc*100:.2f}%)")
else:
print("No checkpoint found!")
tf.train.latest_checkpoint()
Tự động tìm file checkpoint mới nhất dựa trên số epoch/timestamp trong tên file.
# Files trong checkpoints/:
# cp-0001.ckpt.index, cp-0001.ckpt.data-00000-of-00001
# cp-0002.ckpt.index, cp-0002.ckpt.data-00000-of-00001
# ...
latest = tf.train.latest_checkpoint('checkpoints')
# Trả về: 'checkpoints/cp-0002.ckpt' (không có extension .index/.data)
Workflow đầy đủ: Train + Checkpoint + Resume
import os
os.makedirs('checkpoints', exist_ok=True)
checkpoint_path = "checkpoints/cp-{epoch:04d}.ckpt"
checkpoint_cb = keras.callbacks.ModelCheckpoint(
filepath=checkpoint_path,
save_weights_only=True,
verbose=1,
save_freq='epoch'
)
model = create_model()
# Train phase 1: 5 epochs
model.fit(x_train, y_train, epochs=5, callbacks=[checkpoint_cb], verbose=0)
# ... sau một thời gian, resume training ...
# Model mới cùng kiến trúc
model2 = create_model()
latest = tf.train.latest_checkpoint('checkpoints')
model2.load_weights(latest)
# Train phase 2: tiếp 5 epochs
model2.fit(x_train, y_train, epochs=5, callbacks=[checkpoint_cb], verbose=0)
Reset model (khởi tạo lại weights)
# Cách 1: Tạo model mới (khuyên dùng)
model = create_model()
# Cách 2: Re-initialize weights thủ công (phức tạp)
for layer in model.layers:
if hasattr(layer, 'kernel_initializer'):
layer.kernel.assign(layer.kernel_initializer(shape=layer.kernel.shape))
if hasattr(layer, 'bias_initializer') and layer.use_bias:
layer.bias.assign(layer.bias_initializer(shape=layer.bias.shape))
Khuyên dùng: Tạo model mới bằng factory function create_model() - sạch, đơn giản, tránh bug.