понедельник, 13 августа 2018 г.

Наборы инструментов в TensorFlow

Tensorflow - это вычислительный фреймворк для построения моделей машинного обучения. TensorFlow предоставляет ряд различных наборов инструментов, которые позволяют строить модели с заданным уровнем абстракции. Можно использовать низкоуровневые API чтобы строить модели, определяя серии математических операций. Аналогично можно использовать высокоуровневые API (такие как tf.estimator) чтобы задавать архитектуры, такие как линейные регрессоры или нейронные сети.

Термины TensorFlow

Тензор (Tensor) - это главная структура данных в TensorFlow программах. Тензоры N-мерные (где N может быть очень большим) структуры данных, чаще всего скалярные, векторные или матричные. Элементы тензора могут содержать цельно-числовые (integer), значения с дробной частью (floating-point), или строковые значения.

Граф - в TensorFlow это спецификация вычислений. Узлы в графе представляют собой операции. Края направлены (задают направление) и представляют собой передачу результата операции (тензора), как операнд, на обработку другой операции. Чтобы визуализировать граф можно использовать TensorBoard.

TensorFlow операции (TensorFlow Operations), также известные как Опы (Ops), это узлы которые выполняют вычисления на Тензор объектах или с Тензор объектами (Tensor objects). После вычисления они возвращают 0 или больше тензоров, которые могут быть использованы другими Опами в графе позже. В целом TensorFlow - это программная система, в которой вычисления представляют собой графы. Узлы в графе называются опами (ops).

Иерархия инструментов в TensorFlow

  • На самом верхнем уровне располагается TensorFlow Estimators - высокоуровневое, объектно-ориентированное API
  • Ниже располагаются tf.layers, tf.losses, tf.metrics - библиотеки для общих компонентов моделей
  • Ниже располагается Python TensorFlow - предоставляет Опы (Ops), которые являются обертками для C++ ядер (C++ Kernels) - низкоуровневое API
  • Ниже располагается C++ TensorFlow
  • Ниже располагаются CPU, GPU, TPU - ядра, работающие на одной или нескольких платформах

Компоненты TensorFlow

TensorFlow состоит из следующих двух компонентов:

  • Буфер протокола графа
  • Рабочее состояние (runtime), которое исполняет (распределенный) граф

Эти два компонента аналогичны Python коду и Python интерпретатору соотвеnственно. Как и Python интерпретатор, реализованный на многих платформах чтобы исполнять Python код, TensorFlow может исполнять граф на многих платформах, включая CPU, GPU, TPU.

Который API следует использовать? Следует использовать наиболее высокий уровень абстракции, который решает проблему. Самыми высокими уровнями абстракции легче всего пользоваться, но они по своему дизайну менее гибкие. Рекомендуется начинать с самого высокого уровня абстракции и реализовать рабочий вариант модели. Если нужна дополнительная гибкость для некоторых специальных условий модели, тогда стоит задействовать один уровень ниже. Стоит отметить что каждый API построен на API нижележащих уровней, так что спуск по иерархии должен быть простым и понятным.

tf.estimator API

tf.estimator совместим с scikit-learn API. Scikit-learn - это крайне популярная open-source библиотека на Python для машинного обучения, с более чем 100 тысячами пользователей, включая многих в Google.

Вот псевдокод для программы линейной классификации, реализованной с использованием tf.estimator:

import tensorflow as tf

# Установи линейный классификатор.
classifier = tf.estimator.LinearClassifier(feature_columns)

# Натренируй модель на каких-либо тренировочных данных.
classifier.train(input_fn=train_input_fn, steps=2000)

# Используй модель, чтобы предсказать результат.
predictions = classifier.predict(input_fn=predict_input_fn)