Наблюдаемость TensorFlow Keras
TensorFlow и его удобный последовательный интерфейс Keras представляют собой передовую технологию для обучения и запуска моделей глубокого обучения.
TensorFlow представляет собой универсальную платформу машинного обучения, которая позволяет специалистам по обработке данных создавать, обучать и запускать всевозможные модели искусственного интеллекта на её основе.
TensorFlow также поставляется вместе с удобным сервером отладки под названием TensorBoard, который позволяет специалистам по обработке данных собирать и визуализировать всю соответствующую информацию об обучении, такую как логи, события и метрики, на веб-дашборде.
TensorBoard — отличный инструмент для локальной отладки вашей модели ИИ, он неприменим для долговременного наблюдения за работающей моделью ИИ в производственной среде.
Поскольку сбор данных в TensorBoard основан на гибком интерфейсе приема обратных вызовов TensorFlow, легко напрямую отправлять информацию о работе вашей модели ИИ в Ключ-АСТРОМ.
Все, что необходимо — это специальная реализация функции обратного вызова TensorFlow, которая собирает данные и пересылает их в среду мониторинга Ключ-АСТРОМ.
Ключ-АСТРОМ TensorFlow callback receiver
Реализация обработчика обратных вызовов TensorFlow действительно получает важные обновления информации во время этапов обучения и оценки модели.
Ниже представлена реализация обработчика обратных вызовов Ключ-АСТРОМ TensorFlow, который передает метрические данные во время обучения и оценки модели.
| import tensorflow as tf
from tensorflow import keras import requests # Custom TensorFlow Keras callback receiver that sends the logged metrics # to a astromkey monitoring environment. # Read more about writing your own callback receiver here: # https://www.tensorflow.org/guide/keras/custom_callback class astromkeyKerasCallback(keras.callbacks.Callback): metricprefix = '' modelname = '' url = '' apitoken = '' batch = '' # Constructor that takes a metric prefix, the name of the current model that is used, # the astromkey metric ingest API endpoint (e.g.: https://your.live.astromkey.com/api/v2/metrics/ingest) # and the astromkey API token (with metric ingest scope enabled) def __init__(self, metricprefix='tensorflow.', modelname='', url='', apitoken=''): self.metricprefix = metricprefix self.modelname = modelname self.url = url self.apitoken = apitoken def send_metric(self, name, value, tags): tags_str = '' for tag_key in tags: tags_str = tags_str + ',{key}={value}'.format(key=tag_key, value=tags[tag_key]) line = '{prefix}.{name}{tags} {value}\n'.format(prefix=self.metricprefix, tags=tags_str, model=self.modelname, name=name, value=value) self.batch = self.batch + line def flush(self): print(self.batch) r = requests.post(self.url, headers={'Content-Type': 'text/plain', 'Authorization' : 'Api-Token ' + self.apitoken}, data=self.batch) self.batch = '' def on_train_end(self, logs=None): keys = list(logs.keys()) for m in keys: self.send_metric(m, logs[m], { 'model' : self.modelname, 'stage' : 'train' }) self.flush() def on_epoch_end(self, epoch, logs=None): keys = list(logs.keys()) for m in keys: self.send_metric(m, logs[m], { 'model' : self.modelname, 'stage' : 'train' }) self.flush() def on_test_end(self, logs=None): keys = list(logs.keys()) for m in keys: self.send_metric(m, logs[m], { 'model' : self.modelname, 'stage' : 'test' }) self.flush() def on_predict_end(self, logs=None): keys = list(logs.keys()) for m in keys: self.send_metric(m, logs[m], { 'model' : self.modelname, 'stage' : 'predict' }) self.flush() |
Пример обучения и оценки модели Keras
В следующем примере модель Keras загружает известный набор тестовых данных (MNIST) и обучает последовательную модель Keras.
Настроенный приемник обратного вызова Ключ-АСТРОМ TensorFlow, который автоматически получает и пересылает метрики точности и потерь в настроенную среду мониторинга.
В производственной среде (на этапе оценки) тот же приёмник обратного вызова Ключ-АСТРОМ используется для непрерывного получения данных наблюдаемости о работающей модели.
| import tensorflow as tf
print("TensorFlow version:", tf.__version__) import time # load the astromkey callback receiver from astromkey import astromkeyKerasCallback # Load a sample data set mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 # Define a model model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) # Define a loss function loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) # Compile the model model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) # Define the tensor board callbacks dt_callback = astromkeyKerasCallback(metricprefix='tensorflow', modelname='mnist-classifier', url='https://<YOUR_ENV>.live.astromkey.com/api/v2/metrics/ingest', apitoken='<YOUR_TOKEN>') # Train the model model.fit(x_train, y_train, epochs=5, callbacks=[dt_callback]) # Use the model in production while True: model.evaluate(x_test, y_test, verbose=2, callbacks=[dt_callback]) time.sleep(60) |
Визуализация метрик модели TensorFlow в Ключ-АСТРОМ
После того как приёмник обратного вызова Ключ-АСТРОМ TensorFlow зарегистрирован в вашей собственной AI-модели, все собранные метрики перенаправляются в вашу среду мониторинга.