Оценка и мониторинг моделей TensorFlow
1. Основные понятия оценки моделей
В проектах машинного обучения оценка модели — это важнейший этап проверки эффективности модели. Она помогает понять, как модель работает в реальных сценариях, и направляет нас в оптимизации модели.
1.1 Зачем нужна оценка модели
- Проверка производительности: Подтвердить, достигает ли модель ожидаемых результатов
- Выбор модели: Сравнить сильные и слабые стороны разных моделей
- Настройка параметров: Направлять настройку гиперпараметров
- Избежать переобучения: Определить, переобучается ли модель на обучающих данных
1.2 Типы метрик оценки
| Тип метрики | Применимый сценарий | Общие метрики |
|---|---|---|
| Метрики классификации | Задачи классификации | Accuracy, precision, recall, F1-мера |
| Метрики регрессии | Задачи регрессии | MSE、MAE、R² |
| Метрики кластеризации | Обучение без учителя | Коэффициент силуэта, индекс Дэвиса-Болдина |
2. Инструменты оценки TensorFlow
TensorFlow предоставляет множество инструментов и методов для оценки качества модели.
2.1 Встроенные метрики оценки
Пример
import tensorflow as tf
# Часто используемые метрики классификации
metrics = [
tf.keras.metrics.BinaryAccuracy(),
tf.keras.metrics.Precision(),
tf.keras.metrics.Recall(),
tf.keras.metrics.AUC()
]
# Часто используемые метрики регрессии
metrics = [
tf.keras.metrics.MeanSquaredError(),
tf.keras.metrics.MeanAbsoluteError(),
tf.keras.metrics.RootMeanSquaredError()
]
# Часто используемые метрики классификации
metrics = [
tf.keras.metrics.BinaryAccuracy(),
tf.keras.metrics.Precision(),
tf.keras.metrics.Recall(),
tf.keras.metrics.AUC()
]
# Часто используемые метрики регрессии
metrics = [
tf.keras.metrics.MeanSquaredError(),
tf.keras.metrics.MeanAbsoluteError(),
tf.keras.metrics.RootMeanSquaredError()
]
2.2 Процесс оценки
1. Укажите метрики при компиляции модели
Пример
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy', tf.keras.metrics.AUC()]
)
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy', tf.keras.metrics.AUC()]
)
2. Используйте метод evaluate для оценки
Пример
test_loss, test_acc, test_auc = model.evaluate(
test_images, test_labels, verbose=2
)
test_images, test_labels, verbose=2
)
3. Пользовательские функции оценки
Пример
import tensorflow as tf
@tf.function
def custom_metric(y_true, y_pred):
threshold = 0.5
y_pred = tf.cast(y_pred > threshold, tf.float32)
# Вычислите точность, а не только долю положительных примеров
correct_predictions = tf.cast(tf.equal(y_true, y_pred), tf.float32)
return tf.reduce_mean(correct_predictions)
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=[custom_metric, 'accuracy'] # Вы также можете оставить стандартную метрику accuracy в качестве ориентира
)
@tf.function
def custom_metric(y_true, y_pred):
threshold = 0.5
y_pred = tf.cast(y_pred > threshold, tf.float32)
# Вычислите точность, а не только долю положительных примеров
correct_predictions = tf.cast(tf.equal(y_true, y_pred), tf.float32)
return tf.reduce_mean(correct_predictions)
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=[custom_metric, 'accuracy'] # Вы также можете оставить стандартную метрику accuracy в качестве ориентира
)
3. Мониторинг и визуализация модели
1. Интеграция TensorBoard
TensorBoard — это инструмент визуализации TensorFlow, позволяющий отслеживать процесс обучения в реальном времени.
Пример
# Настройте функцию обратного вызова
tensorboard_callback = tf.keras.callbacks.TensorBoard(
log_dir='./logs',
histogram_freq=1,
write_graph=True,
write_images=True
)
# Добавьте обратный вызов при обучении модели
model.fit(
train_data,
epochs=10,
validation_data=val_data,
callbacks=[tensorboard_callback]
)
tensorboard_callback = tf.keras.callbacks.TensorBoard(
log_dir='./logs',
histogram_freq=1,
write_graph=True,
write_images=True
)
# Добавьте обратный вызов при обучении модели
model.fit(
train_data,
epochs=10,
validation_data=val_data,
callbacks=[tensorboard_callback]
)
Запустите TensorBoard:
tensorboard --logdir=./logs
2. Ключевые метрики для мониторинга

4. Продвинутые методы оценки
4.1 Кросс-валидация
Пример
from sklearn.model_selection import KFold
import numpy as np
# Подготовка данных
X = np.array(...)
y = np.array(...)
# 5-кратная кросс-валидация
kfold = KFold(n_splits=5, shuffle=True)
fold_no = 1
for train, test in kfold.split(X, y):
# Создание модели
model = create_model()
# Обучите модель
model.fit(X[train], y[train], epochs=10)
# Оценка модели
scores = model.evaluate(X[test], y[test])
print(f'Fold {fold_no} - {model.metrics_names[0]}: {scores[0]}')
fold_no += 1
import numpy as np
# Подготовка данных
X = np.array(...)
y = np.array(...)
# 5-кратная кросс-валидация
kfold = KFold(n_splits=5, shuffle=True)
fold_no = 1
for train, test in kfold.split(X, y):
# Создание модели
model = create_model()
# Обучите модель
model.fit(X[train], y[train], epochs=10)
# Оценка модели
scores = model.evaluate(X[test], y[test])
print(f'Fold {fold_no} - {model.metrics_names[0]}: {scores[0]}')
fold_no += 1
4.2 Анализ матрицы ошибок
Пример
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# Получить результаты прогноза
y_pred = model.predict(test_images)
y_pred_classes = np.argmax(y_pred, axis=1)
# Сгенерировать матрицу ошибок
conf_mat = confusion_matrix(test_labels, y_pred_classes)
# Визуализация
plt.figure(figsize=(10, 8))
sns.heatmap(conf_mat, annot=True, fmt='d')
plt.xlabel('Предсказано')
plt.ylabel('Фактически')
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
# Получить результаты прогноза
y_pred = model.predict(test_images)
y_pred_classes = np.argmax(y_pred, axis=1)
# Сгенерировать матрицу ошибок
conf_mat = confusion_matrix(test_labels, y_pred_classes)
# Визуализация
plt.figure(figsize=(10, 8))
sns.heatmap(conf_mat, annot=True, fmt='d')
plt.xlabel('Предсказано')
plt.ylabel('Фактически')
plt.show()
5. Мониторинг модели после развертывания
5.1 Ключевые моменты мониторинга производственной среды
- Обнаружение дрейфа данных: Отслеживайте изменения в распределении входных данных
- Обнаружение дрейфа концепции: отслеживайте изменения в связи между признаками и целевыми переменными
- Обнаружение деградации производительности: периодически оценивайте производительность модели
- Обнаружение аномальных входных данных: выявляйте аномальные входные образцы
5.2 Архитектура системы мониторинга

6. Практическое занятие
6.1 Практические задания
- Обучите простую модель CNN на наборе данных MNIST
- Реализуйте следующие функции оценки:
- Мониторинг точности и потерь в процессе обучения
- Анализ матрицы ошибок на тестовом наборе
- Используйте TensorBoard для визуализации процесса обучения
- Попробуйте реализовать пользовательские метрики оценки
6.2 Справочная структура кода
Пример
import tensorflow as tf
from tensorflow.keras import layers
# 1. Подготовка данных
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
# 2. Построение модели
model = tf.keras.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(10, activation='softmax')
])
# 3. Скомпилируйте модель (добавьте выбранные вами метрики)
model.compile(...)
# 4. Обучите модель (добавьте колбэк TensorBoard)
history = model.fit(...)
# 5. Оцените модель
test_loss, test_acc = model.evaluate(...)
# 6. Анализ матрицы ошибок
# Ваш код...
from tensorflow.keras import layers
# 1. Подготовка данных
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
# 2. Построение модели
model = tf.keras.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(10, activation='softmax')
])
# 3. Скомпилируйте модель (добавьте выбранные вами метрики)
model.compile(...)
# 4. Обучите модель (добавьте колбэк TensorBoard)
history = model.fit(...)
# 5. Оцените модель
test_loss, test_acc = model.evaluate(...)
# 6. Анализ матрицы ошибок
# Ваш код...