Рубрики
Без рубрики

Как использовать TensorFlow с Java

Автор оригинала: David Landup.

Вступление

Машинное обучение набирает популярность и используется во всем мире. Это уже радикально изменило способ создания определенных приложений и, вероятно, будет по-прежнему оставаться огромной (и растущей) частью нашей повседневной жизни.

Это не приукрашивается, Машинное обучение не так просто. Это довольно сложно и может показаться очень сложным многим.

Такие компании, как Google, взяли на себя задачу приблизить концепции машинного обучения к разработчикам и позволить им постепенно, с большой помощью, делать свои первые шаги.

Таким образом, появились такие фреймворки, как TensorFlow .

Что такое тензорный поток?

TensorFlow-это платформа машинного обучения с открытым исходным кодом, разработанная Google на Python и C++.

Это помогает разработчикам легко получать данные, готовить и обучать модели, прогнозировать будущие состояния и выполнять крупномасштабное машинное обучение.

С его помощью мы можем обучать и запускать глубокие нейронные сети, которые чаще всего используются для оптического распознавания символов , распознавания/классификации изображений, Обработки естественного языка и т.д.

Тензоры и операции

TensorFlow основан на вычислительных графах, которые вы можете представить как классический граф с узлами и ребрами.

Каждый узел называется операцией , и они принимают ноль или более тензоров и выводят ноль или более тензоров. Операция может быть очень простой, например, базовое сложение, но она также может быть очень сложной.

Тензоры изображаются в виде ребер графика и являются основной единицей данных. Мы выполняем различные функции на этих тензорах по мере того, как мы передаем их в операции. Они могут иметь одно или несколько измерений, которые иногда называются их рангами – (Скаляр: ранг 0, Вектор: ранг 1, Матрица: ранг 2)

Эти данные протекают через вычислительный граф через тензоры, на которые влияют операции – отсюда и название TensorFlow .

Тензоры могут хранить данные в любом количестве измерений, и существует три основных типа тензоров: заполнители , переменные и константы .

Установка TensorFlow

Используя Maven , установить TensorFlow так же просто, как включить зависимость:


  org.tensorflow
  tensorflow
  1.13.1

Если ваше устройство поддерживает Поддержку GPU , используйте эти зависимости:


  org.tensorflow
  libtensorflow
  1.13.1



  org.tensorflow
  libtensorflow_jni_gpu
  1.13.1

Вы можете проверить версию TensorFlow, установленную в данный момент, с помощью объекта TensorFlow :

System.out.println(TensorFlow.version());

Java API TensorFlow

Предложения Java API TensorFlow содержатся в пакете org.tensorflow . В настоящее время он является экспериментальным, поэтому его стабильность не гарантируется.

Пожалуйста, обратите внимание, что единственным полностью поддерживаемым языком для TensorFlow является Python и что Java API далеко не так функционален.

Он знакомит нас с новыми классами, интерфейсом, перечислением и исключением.

Занятия

Новыми классами, представленными через API, являются:

  • График : График потока данных, представляющий вычисление тензорного потока
  • Операция : Узел графика, который выполняет вычисления на тензорах
  • Конструктор операций : Класс построителя для операций
  • Вывод : Символьный дескриптор тензора, созданный операцией
  • Сохраненный пакет моделей : Представляет модель, загруженную из хранилища.
  • Сохраненный Комплект Моделей.Загрузчик : Предоставляет опции для загрузки сохраненной модели
  • Сервер : Сервер TensorFlow в процессе, для использования в распределенном обучении
  • Сеанс : Драйвер для выполнения графика
  • Сессия.Выполнить : Выходные тензоры и метаданные, полученные при выполнении сеанса
  • Сессия.Runner : Запуск операций и оценка тензоров
  • Форма : Возможно, частично известная форма тензора, полученная в результате операции
  • Тензор : Статически типизированный многомерный массив, элементы которого имеют тип, описываемый
  • TensorFlow : Статические служебные методы, описывающие среду выполнения TensorFlow
  • Тензоры : Типобезопасные заводские методы для создания тензорных объектов
Перечисление
  • Тип данных : Представляет тип элементов в тензоре в виде перечисления
Интерфейс
  • Операнд : Интерфейс, реализуемый операндами операции тензорного потока
Исключение

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

  • Исключение TensorFlow : Непроверенное исключение, возникающее при выполнении графиков TensorFlow

Если мы сравним все это с модулем tf в Python , то обнаружим очевидную разницу. API Java не обладает почти таким же количеством функций, по крайней мере, на данный момент.

Графики

Как упоминалось ранее, TensorFlow основан на вычислительных графиках – где org.tensorflow.Graph – это реализация Java.

Примечание : Его экземпляры потокобезопасны, хотя нам нужно явно освободить ресурсы, используемые графиком, после того, как мы закончим с ним.

Давайте начнем с пустого графика:

Graph graph = new Graph();

Этот график мало что значит, он пустой. Чтобы что-то с ним сделать, нам сначала нужно загрузить его с помощью Operation s.

Чтобы загрузить его операциями, мы используем метод appbuilder () , который возвращает объект Operation Builder , который добавит операции в наш график, как только мы вызовем метод .build () .

Константы

Давайте добавим константу в наш график:

Operation x = graph.opBuilder("Const", "x")
               .setAttr("dtype", DataType.FLOAT)
               .setAttr("value", Tensor.create(3.0f))
               .build(); 

Заполнители

Заполнители-это “тип” переменной, которая не имеет значения при объявлении. Их значения будут присвоены позже. Это позволяет нам строить графики с операциями без каких-либо фактических данных:

Operation y = graph.opBuilder("Placeholder", "y")
        .setAttr("dtype", DataType.FLOAT)
        .build();

Функции

И теперь, наконец, чтобы завершить это, нам нужно добавить определенные функции. Они могут быть такими же простыми, как умножение, деление или сложение, или такими же сложными, как умножение матриц. Так же, как и раньше, мы определяем функции с помощью метода .opibuilder() :

Operation xy = graph.opBuilder("Mul", "xy")
  .addInput(x.output(0))
  .addInput(y.output(0))
  .build();         

Примечание: Мы используем вывод(0) , поскольку тензор может иметь более одного вывода.

Визуализация графика

К сожалению, Java API еще не включает в себя никаких инструментов, позволяющих визуализировать графики, как это было бы в Python. Когда Java API будет обновлен, то же самое произойдет и с этой статьей.

Сессий

Как упоминалось ранее, Сессия является драйвером для выполнения Графика . Он инкапсулирует среду, в которой Операция s и График s выполняются для вычисления Тензора s.

Это означает, что тензоры в нашем графике, которые мы построили, на самом деле не имеют никакого значения, поскольку мы не запускали график в течение сеанса.

Давайте сначала добавим график в сеанс:

Session session = new Session(graph);

Наше вычисление просто умножает значение x и y . Чтобы запустить наш график и вычислить его, мы извлекаем() операцию xy и передаем ей значения x и y :

Tensor tensor = session.runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);
System.out.println(tensor.floatValue());

Запуск этого фрагмента кода приведет к:

10.0f

Сохранение моделей на Python и загрузка на Java

Это может показаться немного странным, но, поскольку Python является единственным хорошо поддерживаемым языком, Java API по-прежнему не обладает функциями для сохранения моделей.

Это означает, что Java API предназначен только для обслуживаемого варианта использования, по крайней мере, до тех пор, пока он полностью не будет поддерживаться TensorFlow. По крайней мере, мы можем обучать и сохранять модели на Python, а затем загружать их в Java для их обслуживания, используя Сохраненный пакет моделей класс:

SavedModelBundle model = SavedModelBundle.load("./model", "serve"); 
Tensor tensor = model.session().runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);  

System.out.println(tensor.floatValue());

Вывод

TensorFlow-это мощная, надежная и широко используемая платформа. Он постоянно совершенствуется и в последнее время внедряется в новые языки, включая Java и JavaScript.

Хотя Java API еще не обладает почти такой же функциональностью, как TensorFlow для Python, он все еще может служить хорошим введением в TensorFlow для разработчиков Java.