Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

TensorFlow: Test, reset model và load latest checkpoint Python

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.