GaiaEx AcademyGaiaEx Academy
TensorFlow, Keras і TensorBoard для моніторингу моделей
РозробникШІ та МН12 min read

TensorFlow, Keras і TensorBoard для моніторингу моделей

ML-фреймворк Google та його потужна панель візуалізації

Поділитися

Екосистема TensorFlow: більше, ніж просто фреймворк

TensorFlow, розроблений Google Brain і випущений у 2015 році, — це не просто бібліотека глибокого навчання, а ціла екосистема для побудови, тренування, розгортання й моніторингу моделей машинного навчання будь-якого масштабу. Хоча PyTorch домінує в дослідницькій сфері, TensorFlow залишається промисловим тяжковаговиком, розгорнутим у системах, що обробляють мільярди прогнозів щодня в Google, Airbnb, Twitter та тисячах інших компаній.

Екосистема охоплює весь життєвий цикл машинного навчання:

  • Keras — високорівневий API для побудови й тренування моделей, тепер повністю інтегрований у TensorFlow як tf.keras
  • TensorBoard — набір інструментів візуалізації для моніторингу тренування, порівняння експериментів і дебагінгу моделей
  • tf.data — високопродуктивні конвеєри даних для подачі великих наборів даних у моделі
  • TensorFlow Serving — промислове обслуговування моделей із версіонуванням, батчингом та апаратним прискоренням
  • TensorFlow Lite — оптимізоване середовище виконання для мобільних і периферійних пристроїв
  • TensorFlow.js — запуск моделей безпосередньо в браузері

Ця широта — найбільша сила TensorFlow. Ви можете прототипувати модель у Jupyter notebook за допомогою Keras, тренувати її на GPU-кластері, спостерігати за тренуванням через TensorBoard, обслуговувати через TF Serving за API та розгортати стиснуту версію на Raspberry Pi — усе в межах одного фреймворку. Для фінансових застосунків, де вам можуть знадобитись моделі, що працюють одночасно у хмарному торговому движку (підключеному до API GaiaEx) і на локальній робочій станції для досліджень, ця гнучкість має значення.

Життєвий цикл ML у TensorFlow (спрощено) Дані Keras Тренування Логи TB Serving / edge Той самий граф може живити і дослідницькі notebook, і продакшн — якщо ви стандартизуєте артефакти (SavedModel). Конвеєри tf.data тримають GPU завантаженими; TF Serving версіонує моделі без даунтайму
Прототип, тренування, спостереження, розгортання — один стек, багато середовищ виконання.

Keras: Sequential і Functional API для побудови моделей

Keras був створений з одним керівним принципом: зменшити когнітивне навантаження при побудові нейронних мереж. Це досягається через два API для побудови моделей, кожен придатний для різного рівня складності.

Sequential API — найпростіший: лінійний стек шарів:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(128, activation="relu", input_shape=(20,)),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(1, activation="sigmoid"),
])

Для моделей з кількома входами, кількома виходами, спільними шарами чи skip-з’єднаннями Functional API дає повний контроль на рівні графа:

price_input = keras.Input(shape=(60, 5), name="price_sequence")
meta_input = keras.Input(shape=(10,), name="metadata")

x = keras.layers.LSTM(64, return_sequences=True)(price_input)
x = keras.layers.LSTM(32)(x)

combined = keras.layers.concatenate([x, meta_input])
combined = keras.layers.Dense(64, activation="relu")(combined)
output = keras.layers.Dense(1, activation="sigmoid")(combined)

model = keras.Model(inputs=[price_input, meta_input],
                    outputs=output)

Ця модель приймає два входи — 60-крокову послідовність цін, обробленою стеком LSTM, і вектор метаданих зі статичних ознак — об’єднує їх і видає прогноз напрямку. Така архітектура поширена у фінансовому ML, коли ви хочете поєднати часові паттерни (нещодавня динаміка ціни) з контекстною інформацією (режим волатильності, ставка фінансування, день тижня).

Ключові типи шарів для фінансових застосунків: Dense для табличних ознак, LSTM і GRU для часових рядів, Conv1D для вивчення локальних часових паттернів та MultiHeadAttention для моделювання послідовностей у стилі трансформера.

Компіляція моделей і callback'и для розумнішого тренування

Після побудови модель Keras потрібно скомпілювати з трьома компонентами: оптимізатором, функцією втрат і метриками оцінки.

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss="binary_crossentropy",
    metrics=["accuracy", keras.metrics.AUC(name="auc")],
)

history = model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=64,
    validation_data=(X_val, y_val),
    callbacks=[...],
)

Callback'и — це хуки, що виконуються у визначені моменти тренування: після кожної епохи, батчу чи за виконання певних умов. Вони автоматизують управління тренуванням, яке інакше вимагало б ручного моніторингу:

  • EarlyStopping — зупиняє тренування, коли валідаційні втрати не покращуються протягом patience епох. Запобігає перенавчанню та зайвим витратам обчислень. Встановіть restore_best_weights=True, щоб автоматично повертатися до найкращого чекпоінту.
  • ModelCheckpoint — зберігає модель кожного разу, коли валідаційна метрика покращується. Ніколи не втрачайте найкращу модель через збій тренування чи перенавчання на пізніших епохах.
  • ReduceLROnPlateau — зменшує швидкість навчання, коли валідаційні втрати виходять на плато. Це часто розкриває додаткову продуктивність, яку фіксована швидкість навчання пропускає — модель робить великі кроки на початку, а потім тонко налаштовується меншими кроками.
callbacks = [
    keras.callbacks.EarlyStopping(
        monitor="val_loss", patience=15,
        restore_best_weights=True),
    keras.callbacks.ModelCheckpoint(
        "best_model.keras", monitor="val_auc",
        mode="max", save_best_only=True),
    keras.callbacks.ReduceLROnPlateau(
        monitor="val_loss", factor=0.5,
        patience=5, min_lr=1e-6),
    keras.callbacks.TensorBoard(log_dir="./logs"),
]

Завжди використовуйте EarlyStopping та ModelCheckpoint разом. Тренування фінансової моделі протягом надто великої кількості епох майже гарантовано призводить до перенавчання — модель починає заучувати шум у тренувальних даних. Ці два callback'и гарантують, що ви зупинитесь у правильний момент і збережете правильні ваги.

TensorBoard: візуалізація тренування та дебагінг моделей

TensorBoard — набір інструментів візуалізації TensorFlow, і це один з найцінніших інструментів у робочому процесі будь-якого практика ML — незалежно від того, чи використовуєте ви TensorFlow, PyTorch чи JAX. Він перетворює сирі логи тренування в інтерактивні дашборди, що показують, що відбувається всередині вашої моделі.

Запустіть TensorBoard, вказавши на директорію з логами:

# Термінал
tensorboard --logdir=./logs --port=6006

# Або в Jupyter notebook
%load_ext tensorboard
%tensorboard --logdir ./logs

Ключові візуалізації для розробки фінансових моделей:

Scalars — криві втрат на тренуванні й валідації, побудовані в часі. Розрив між ними показує перенавчання: якщо тренувальні втрати продовжують знижуватись, а валідаційні зростають, це означає, що модель заучує шум. Здорове тренування показує обидві криві, що знижуються разом, з валідаційною кривою трохи вище тренувальної.

Histograms — розподіли ваг, зсувів (bias) та активацій по шарах і епохах. Стежте за розподілами ваг, що колапсують до нуля (зникаючі градієнти), розростаються до великих значень (нестабільне тренування) чи активаціями, що насичуються на 0 або 1 («мертві» нейрони). Ці проблеми невидимі на кривих втрат, але очевидні в histograms.

Embeddings — проєкція високовимірних представлень у 2D- чи 3D-простір за допомогою t-SNE або PCA. Візуалізуйте, чи навчилась ваша модель розділяти різні режими ринку, класи активів чи стани волатильності у своїх внутрішніх представленнях.

HParams — порівняння перебору гіперпараметрів між експериментами. Запустіть ту саму модель з різними швидкостями навчання, архітектурами та значеннями dropout, а потім визначте, які комбінації дають найкращі валідаційні метрики. Це систематичне порівняння замінює безсистемне експериментування вибором моделі на основі доказів.

TensorBoard також працює з PyTorch через клас torch.utils.tensorboard.SummaryWriter — інструменти візуалізації не залежать від фреймворку, і це одна з причин, чому TensorBoard став де-факто стандартом в екосистемі ML.

Панелі TensorBoard (концептуально) Scalars train vs val loss Histograms ваги / активації HParams порівняння прогонів Перенавчання проявляється у розбіжних кривих ще до того, як воно проявиться у бектесті P&L.
Scalars фіксують якість підгонки; histograms виявляють зламані шари; HParams порівнюють експерименти.

Конвеєри tf.data та TensorFlow Serving для продакшну

Коли ваш набір даних занадто великий, щоб уміститися в пам’яті — типова ситуація при роботі з тіковими даними з таких бірж, як GaiaEx — tf.data забезпечує ефективний, паралелізований конвеєр даних, що тримає GPU завантаженим без завантаження всього одразу.

dataset = tf.data.Dataset.from_tensor_slices((features, labels))
dataset = (dataset
    .window(60, shift=1, drop_remainder=True)
    .flat_map(lambda w: w.batch(60))
    .batch(64)
    .prefetch(tf.data.AUTOTUNE)
)

Виклик prefetch(AUTOTUNE) є критично важливим — він дозволяє завантаженню даних і обчисленню моделі перекриватися за часом, тож GPU ніколи не сидить без роботи, чекаючи наступний батч. Для фінансових наборів даних зі складним feature engineering ви можете об’єднати ланцюжок трансформацій .map(), що виконуються паралельно, обчислюючи індикатори й нормалізації на льоту, а не попередньо обчислюючи й зберігаючи їх.

TensorFlow Serving — це промислова система для розгортання моделей за високопродуктивним gRPC- чи REST-API. Вона обробляє версіонування моделей (обслуговувати нову модель, зберігаючи стару як запасний варіант), батчинг запитів (об’єднання кількох запитів на inference для ефективності GPU) та апаратне прискорення — усе критично важливе для торгових систем, де важливі й латентність, і надійність.

# Експорт SavedModel
model.save("models/price_predictor/1")

# Обслуговування через Docker
# docker run -p 8501:8501 \
#   --mount type=bind,source=$(pwd)/models,target=/models \
#   -e MODEL_NAME=price_predictor \
#   tensorflow/serving

Типова продакшн-архітектура: ваш торговий бот підключається до WebSocket-фіду GaiaEx, обчислює ознаки в реальному часі, надсилає запити на inference до TF Serving і отримує прогнози за одноцифрові мілісекунди. Коли ви перетреновуєте модель на нових даних, розгорніть оновлену модель як версію 2 — TF Serving підмінить її без даунтайму.

TensorFlow Lite, розгортання на пристроях і TF проти PyTorch

TensorFlow Lite стискає моделі для розгортання на мобільних пристроях, вбудованих системах та периферійному апаратному забезпеченні. Завдяки технікам, таким як квантизація (перетворення 32-бітних вагів з плаваючою комою у 8-бітні цілі числа), pruning (видалення близьких до нуля ваг) та оптимізація архітектури, TF Lite може зменшити модель у 4 і більше разів, зберігаючи більшість її точності. Це дає змогу запускати inference безпосередньо на пристроях з обмеженими обчислювальними ресурсами — корисно для периферійних торгових вузлів чи моніторингових дашбордів, яким потрібно працювати незалежно від хмарної інфраструктури.

# Конвертація моделі Keras у TF Lite
converter = tf.lite.TFLiteConverter.from_saved_model("models/v1")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

with open("model.tflite", "wb") as f:
    f.write(tflite_model)

TensorFlow чи PyTorch — що обрати для фінансових застосунків?

  • Для досліджень і прототипування: PyTorch. Його динамічні графи, Python-орієнтований API та домінуюча позиція в академічних дослідженнях означають, що більше статей містить код на PyTorch, більше туторіалів використовує PyTorch, а дебагінг інтуїтивніший.
  • Для промислового розгортання в масштабі: TensorFlow досі має переваги. TF Serving, TF Lite та TensorFlow.js забезпечують перевірені бойові шляхи розгортання, до яких TorchServe і ONNX Runtime від PyTorch ще дозрівають.
  • Конкретно для фінансового ML: почніть з PyTorch для розробки моделей і експериментування. Якщо ваші виробничі вимоги потребують зрілості TF Serving чи периферійного розгортання TF Lite, конвертуйте свої найкращі моделі. Багато команд використовують PyTorch для досліджень і TensorFlow для розгортання, з’єднуючи їх через формат ONNX (Open Neural Network Exchange).

Чесна правда: обидва фреймворки сходяться. TensorFlow прийняв eager execution; PyTorch додав torch.compile для оптимізації на рівні графа. Сам Keras тепер підтримує PyTorch, JAX і TensorFlow як бекенди. Найкращий фреймворк — той, який ваша команда добре знає і може використовувати для випуску продакшн-коду. Оберіть один, опануйте його й розв’язуйте фактичну проблему — прогнозування ринків — а не сперечайтеся про інструменти.