www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

От Scikit-учиться до TensorFlow: Часть 1

Дата публикации May 6, 2017

Введение

За последние полтора годаTensorFlowвырос в огромном темпе, как с точки зрениякоэффициент усыновленияИ ввычислить скорость,


Источник изображения: Неоправданная популярность TensorFlow [http://deliprao.com/archives/168]

TensorFlow зарекомендовал себя как наиболее востребованная библиотека для разработки алгоритмов машинного обучения (ML). Тем не менее, он, похоже, также зарекомендовал себя как библиотека, требующая определений для сессий и графиков, которые довольно утомительны и занимают много времени. Хотя он делает большую работу по эффективному вычислению градиентов для обученияCNNs,RNNsа такжеLSTMs, это не все.

В этой серии статей я хочу обсудить, как TensorFlow можно использовать в качестве библиотеки ML общего назначения. Более конкретно, мы обсудим, как это похоже наscikit учитьсядругая библиотека ML очень популярна среди ученых и разработчиков данных.

Причины перейти на TensorFlow

Хотя scikit-learn имеет в своем арсенале высокооптимизированные алгоритмы, ему не хватает возможностей для масштабирования при работе с большим количеством точек данных. Тем не менее, TensorFlow предоставляет целый ряд преимуществ по сравнению с scikit-learn:

  • Высокоэффективные модули ML
  • Customisability
  • Масштабирование для обслуживания больших точек данных
  • Возможность использовать графические процессоры и обучаться на географически распределенных графических устройствах
  • Устройство независимого вычисления
  • левереджGoogle Cloudсделать выводы на обученной модели ML
  • Очень гибкийЛицензия Apache 2.0в то время как scikit-Learn включенЛицензия BSD(хотя оба являются коммерчески применимыми, Apache 2.0 менее подвержен патентным спорам)

Цели

  • Понимать функциональные возможности, которые похожи между scikit-learn и TensorFlow, что позволит пользователям scikit-learn легко использовать TensorFlow.
  • Разработать программу классификации сортов цветов изЦветы ирисанабор данных с использованием scikit-learn и TensorFlow для понимания усилий, необходимых для построения такой системы.
  • Продемонстрируйте, насколько простым может быть TensorFlow для создания новых идей.

Сходства на уровне функций

Одна из причин популярности Scikit-Learn заключается в простоте

classifier.fit() / classifier.predict() 

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

С другой стороны, у нас естьAPI высокого уровняв TensorFlow, который был вдохновлен Scikit-Learn. Эти функции в TensorFlow работают очень похоже на scikit-learn, с аналогичнымипоместитьсяа такжепрогнозироватьметоды наряду с другими функциями, которые позволяют дальнейшую настройку.

Прежде чем мы углубимся в разработку нашей структуры классификации с использованием высокоуровневых API-вызовов TensorFlow, давайте обсудим низкоуровневую вычислительную среду TensorFlow. TensorFlow используетрасчетные графикивыполнить все его вычисления. Вычисления представлены как примерtf.Graphобъект, где данные представлены в видеtf.Tensorобъект и операции над такими тензорными объектами с использованиемtf.Operationобъект. Затем график выполняется в сеансе с использованиемtf.Sessionобъект. Как очевидно, создание структуры классификации с использованием низкоуровневого API TensorFlow потребует усилий для тестирования простого прототипа ML. Это одна из причин, по которой мы обсуждаем высокоуровневый API TensorFlow для сравнения с API Scikit-Learn. Мы поговорим о низкоуровневых API и его использовании в следующих статьях.

Образец кода

Мы строим классификатор, используя scikit-learn'sSVMмодуль и высокоуровневый API TensorFlow для классификации цветов на основе характеристик цветка. В этом случае набор данных предоставляет 4 различные функции, такие какширина чашелистика,длина чашелистика,ширина лепесткаа такжедлина лепесткаклассифицировать цветок в один из трех видов цветов (Iris Setosa, Iris лишай, а такжеIris virginica.)

Код для этого проекта доступен на моемGitHubстр.

Источник изображения: TensorFlow Quickstart [https://www.tensorflow.org/get_started/tflearn]

Если мы посмотрим на записную книжку по ссылке GitHub выше, то увидим, что загрузка данных и разделение функций разделяются обеими платформами. Мы определяем классификатор SVM в scikit-learn следующим образом:

# ------------------------------------------
# Scikit Learn Implementation
# ------------------------------------------
# Use support vector classification
classifier_sk = svm.SVC()# Use the train data to train this classifier
classifier_sk.fit(x_train, y_train)# Use the trained model to predict on the test data
predictions = classifier_sk.predict(x_test)
score = metrics.accuracy_score(y_test, predictions)

В приведенном выше фрагменте кода мы просто определяем классификатор опорных векторов.svm.SVC (), объект которого используется для обучения и прогнозирования. Обучение достигается с использованиемпоместиться()в то время как прогноз достигается с помощьюпредсказать, ()вызов метода. Наконец, мы вычисляем значение точности в последней строке этого фрагмента кода из четырех строк.

С другой стороны, в TensorFlow мы можем использовать классификатор глубоких нейронных сетей (DNN) для той же задачи Мы используемDNNClassifierдоступно под TensorFlow'sвномодуль следующим образом:

# ------------------------------------------
# TensorFlow Implementation
# ------------------------------------------# Extract the features from the training data
feats = tf.contrib.learn.infer_real_valued_columns_from_input(x_train)# Building a 3-layer DNN with 50 units each.
classifier_tf = tf.contrib.learn.DNNClassifier(feature_columns=feats,
hidden_units=[50, 50, 50],
n_classes=3)# Use the train data to train this classifier
classifier_tf.fit(x_train, y_train, steps=5000)# Use the trained model to predict on the test data
predictions = list(classifier_tf.predict(x_test, as_iterable=True))
score = metrics.accuracy_score(y_test, predictions)

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

Путь миграции в TensorFlow

В то время как задача перехода от одного фреймворка к другому часто утомительна, а иногда и разочаровывает, TensorFlow, похоже, имеет мост, который позволяет разработчикам плавно переходить из другого фреймворка.contrib.learnМодуль обеспечивает такой мост, который позволяет знакомый путь из Scikit-Learn илиKerasв TensorFlow.

TensorFlow также достаточно вместителен, чтобы включитьчитателикоторые высоко оптимизированы для качественного использования и в то же время поддерживают большинство форматов файлов, используемых сообществом ML. Это позволяет разработчикам избегать зависимости от других платформ, таких какПанды(который выполняет тяжелую работу по чтению файлов, но все же требует ручной подачи данных в среду ML.) Показатели TensorFlow также показали высокую производительность наTensorFlow Dev Summitсостоялся в начале этого года.

Резюме

В этой статье мы начали исследование по разработке классификатора с использованием scikit-learn и TensorFlow для выполнения простой задачи. Мы обсуждали, как высокоуровневый API TensorFlow похож на API Scikit-Learn. Вы можете получить доступ к коду, обсуждаемому в этом блоге, на моемGitHubстр.

В следующем посте я планирую представить еще несколько модулей Scikit и их аналоги из TensorFlow. Вы имеете в виду что-то конкретное? Чирикать мне@krtkили свяжитесь со мной поLinkedIn,

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map