Mô tả
Tạo model mới (chưa train), evaluate trên test set để xem baseline performance (random initialization).
Code ví dụ
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
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 test data (MNIST-like)
x_test = np.random.rand(1000, 784).astype('float32')
y_test = np.random.randint(0, 10, 1000)
# 1. TẠO MODEL MỚI (CHƯA TRAIN)
model = create_model()
print("An instance of the model is created")
# 2. ĐÁNH GIÁ MODEL UNTRAINED
print("Evaluating untrained model...")
loss, acc = model.evaluate(x_test, y_test, verbose=0)
print(f"Untrained model - Loss: {loss:.4f}, Accuracy: {acc:.4f} ({acc*100:.2f}%)")
# 3. SO SÁNH VỚI RANDOM GUESS
# 10 classes → random accuracy ≈ 10%
print(f"\nRandom guess baseline: ~10% accuracy")
print(f"Model accuracy: {acc*100:.2f}%")
# 4. TRAIN VÀ ĐÁNH GIÁ LẠI
model.fit(x_test[:800], y_test[:800], epochs=5, verbose=0)
loss_trained, acc_trained = model.evaluate(x_test[800:], y_test[800:], verbose=0)
print(f"\nAfter 5 epochs - Loss: {loss_trained:.4f}, Accuracy: {acc_trained:.4f} ({acc_trained*100:.2f}%)")
Đầu ra mẫu
An instance of the model is created Evaluating untrained model... Untrained model - Loss: 2.3026, Accuracy: 0.0980 (9.80%) Random guess baseline: ~10% accuracy Model accuracy: 9.80% After 5 epochs - Loss: 0.8542, Accuracy: 0.6720 (67.20%)
Giải thích kết quả
- Loss ~2.3: Cross-entropy loss cho uniform prediction (1/10 mỗi class) = -ln(0.1) ≈ 2.3026.
- Accuracy ~10%: Khớp với random guess cho 10 classes.
- Sau training: Loss giảm, Accuracy tăng đáng kể.
Tại sao evaluate untrained model?
- Baseline: Mốc so sánh để biết training có hiệu quả không.
- Sanity check: Kiểm tra data pipeline, loss function, metrics đúng không.
- Debug: Nếu untrained model đã có accuracy cao → data leak, label sai, hoặc task quá dễ.
- Initialization check: Kiểm tra weight initialization hợp lý.
Evaluate() chi tiết
# evaluate() trả về list: [loss, metric1, metric2, ...]
results = model.evaluate(x_test, y_test, verbose=0, return_dict=True)
print(results)
# {'loss': 2.3026, 'accuracy': 0.098}
# Batch size tùy chỉnh
model.evaluate(x_test, y_test, batch_size=64)
# Sample weight
sample_weights = np.ones(len(y_test))
model.evaluate(x_test, y_test, sample_weight=sample_weights)
Untrained vs Pretrained
Nếu dùng pretrained model (ImageNet, BERT...): untrained accuracy sẽ cao hơn nhiều do transfer learning.