TensorFlow

Начало работы с TensorFlow

Начало работы с TensorFlow
TensorFlow - это детище Google и, по сути, библиотека для числовых вычислений. Он написан на C / C ++ и имеет очень гибкий API. Этот API может быть связан с интерфейсом Python, поэтому вы можете писать небольшие фрагменты кода Python для решения сложных проблем. Гибкий и согласованный API также позволяет разработчикам использовать один и тот же интерфейсный код для работы на различных платформах, таких как графические процессоры Nvidia, процессоры общего назначения и даже мобильные и встроенные устройства, каждое из которых имеет очень разную реализацию в серверной части.

TensorFlow нашел широкое применение в области машинного обучения именно потому, что машинное обучение включает в себя множество вычислений и используется как обобщенный метод решения проблем. И хотя мы будем взаимодействовать с ним с помощью Python, у него есть интерфейсы для других языков, таких как Go, Node.js и даже C #.

Tensorflow похож на черный ящик, который скрывает внутри себя все математические тонкости, а разработчик просто вызывает нужные функции для решения проблемы. Но какая проблема?

Машинное обучение (ML)

Предположим, вы разрабатываете бота для игры в шахматы. Из-за того, как устроены шахматы, как движутся фигуры и четко определена цель игры, вполне возможно написать программу, которая будет очень хорошо играть в эту игру. Фактически, в шахматах можно было бы перехитрить весь человеческий род. Он будет точно знать, какой ход ему нужно сделать, учитывая состояние всех фигур на доске.

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

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

Идея проста, она начинается с определения задачи классификации. Например, вы хотите автоматизировать процесс определения видов пауков. Виды, которые вам известны, относятся к различным классам (не путать с таксономическими классами), и цель алгоритма состоит в том, чтобы отсортировать новое неизвестное изображение в один из этих классов.

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

Длина Ширина Масса Цвет Текстура Разновидность
5 3 12 коричневый гладкий Папа длинные ноги
10 8 28 год Темно коричневый волосатый Тарантул

Наличие большой коллекции таких отдельных данных о пауках будет использоваться для «обучения» алгоритма, а другой аналогичный набор данных будет использоваться для тестирования алгоритма, чтобы увидеть, насколько хорошо он справляется с новой информацией, с которой он никогда раньше не сталкивался, но которую мы уже знаем. ответьте на.

Алгоритм запускается случайным образом. Другими словами, каждый паук, независимо от его особенностей, будет классифицирован как любой из видов. Если в нашем наборе данных 10 различных видов, то этому наивному алгоритму будет дана правильная классификация примерно в 1/10 случаев из-за чистой случайности.

Но затем аспект машинного обучения начал бы преобладать. Он начал бы связывать определенные функции с определенным результатом. Например, волосатые пауки могут быть птицеедами, как и более крупные пауки. Поэтому всякий раз, когда появляется новый большой и волосатый паук, вероятность того, что он является птицеедом, будет выше. Обратите внимание, мы все еще работаем с вероятностями, это потому, что мы по сути работаем с вероятностным алгоритмом.

Учебная часть работает, изменяя вероятности. Первоначально алгоритм начинается со случайного присвоения индивидам ярлыков «вид» путем создания случайных корреляций, например, «волосатость» и «папа длинные ноги». Когда он делает такую ​​корреляцию, и обучающий набор данных, кажется, не согласуется с ней, это предположение отбрасывается.

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

TensorFlow и обучение собственному классификатору цветов

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

Но мы можем добиться большего, предоставляя алгоритму только необработанные данные изображения, мы можем позволить алгоритму находить шаблоны и понимать различные вещи об изображении, например распознавать формы на изображении, а затем понимать, что такое текстура различных поверхностей, цвет , так далее и так далее. Это начальное понятие компьютерного зрения, и вы также можете использовать его для других типов входов, таких как аудиосигналы и обучение вашего алгоритма распознавания голоса. Все это входит в общий термин «глубокое обучение», где машинное обучение доведено до логической крайности.

Этот обобщенный набор понятий может быть специализирован при работе с большим количеством изображений цветов и их категоризации.

В приведенном ниже примере мы будем использовать Python2.7 интерфейс для взаимодействия с TensorFlow, и мы будем использовать pip (не pip3) для установки TensorFlow. Поддержка Python 3 все еще немного глючит.

Чтобы создать свой собственный классификатор изображений, сначала с помощью TensorFlow, давайте установим его, используя пип:

$ pip установить тензор потока

Далее нам нужно клонировать тензорный поток для поэтов-2 репозиторий git. Это действительно хорошее место для начала по двум причинам:

  1. Это просто и удобно
  2. Он до определенной степени предварительно обучен. Например, классификатор цветов уже обучен понимать, на какую текстуру он смотрит и на какие формы смотрит, поэтому требует меньших вычислительных затрат.

Получим репозиторий:

$ git clone https: // github.ru / googlecodelabs / tenorflow-for-poets-2
$ cd - тензорный поток для поэтов-2

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

Нам все еще нужно обучить алгоритм для конкретной задачи распознавания цветов, для этого нам нужны обучающие данные, поэтому давайте получим это:

$ curl http: // скачать.тензорный поток.org / example_images / flower_photos.тгз
| tar xz -C tf_files

Каталог… ./tenorflow-for-poets-2 / tf_files содержит тонну этих изображений, должным образом маркированных и готовых к использованию. Изображения будут для двух разных целей:

  1. Обучение программе ML
  2. Тестирование программы машинного обучения

Вы можете проверить содержимое папки tf_files и здесь вы обнаружите, что мы сужаемся до 5 категорий цветов: ромашки, тюльпаны, подсолнухи, одуванчик и розы.

Обучение модели

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

$ IMAGE_SIZE = 224
$ ARCHITECTURE = "mobilenet_0".50 _ $ IMAGE_SIZE "

Затем вызовите скрипт python, выполнив команду:

$ python -m скрипты.переобучать \
--bottleneck_dir = tf_files / узкие места \
--how_many_training_steps = 500 \
--каталог_моделей = tf_files / models / \
--summaries_dir = tf_files / training_summaries / "$ АРХИТЕКТУРА" \
--output_graph = tf_files / retrained_graph.pb \
--output_labels = tf_files / retrained_labels.текст \
--архитектура = "$ АРХИТЕКТУРА" \
--image_dir = tf_files / flower_photos

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

Как только скрипт завершит обучение и тестирование, он даст вам оценку точности обученной модели, которая в нашем случае была немного выше 90%.

Использование обученной модели

Теперь вы готовы использовать эту модель для распознавания любого нового изображения цветка. Мы будем использовать это изображение:

Лицо подсолнуха еле видно, и это большая проблема для нашей модели:

Чтобы получить это изображение с Wikimedia Commons, используйте wget:

$ wget https: // загрузить.Викимедиа.org / wikipedia / commons / 2/28 / Sunflower_head_2011_G1.jpg
$ mv Sunflower_head_2011_G1.jpg tf_files / unknown.jpg

Он сохраняется как неизвестный.jpg под tf_files подкаталог.

Теперь, на мгновение правды, мы посмотрим, что наша модель говорит об этом изображении.Для этого мы вызываем label_image сценарий:

$ python -m скрипты.label_image --graph = tf_files / retrained_graph.pb --
изображение = tf_files / unknown.jpg

Вы получите примерно такой результат:

Цифры рядом с типом цветка представляют вероятность того, что наше неизвестное изображение принадлежит этой категории. Например, это 98.04% уверены, что на изображении подсолнух и это всего 1.37% шанс, что это роза.

Заключение

Даже с очень посредственными вычислительными ресурсами мы наблюдаем ошеломляющую точность при идентификации изображений. Это наглядно демонстрирует мощность и гибкость TensorFlow.

С этого момента вы можете начать экспериментировать с различными другими типами входных данных или попытаться написать собственное приложение с использованием Python и TensorFlow. Если вы хотите немного лучше узнать внутреннюю работу машинного обучения, вот интерактивный способ сделать это.

Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...
Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...