TensorFlow — это фреймворк машинного обучения (ML) от Google.

TensorFlow 1 хорошо известен своей недружелюбностью к пользователю (особенно для новичков в машинном обучении). Но все изменилось с тех пор, как в конце прошлого года был выпущен TensorFlow 2. В TensorFlow 2 большинство API-интерфейсов упрощены, и, по моему личному мнению, это САМЫЙ простой и самый мощный фреймворк машинного обучения на рынке. Поэтому для любителей машинного обучения самое время попробовать этот TensorFlow 2 и посмотреть, на что он способен.

В этом посте я не буду включать какие-либо подробности различий между TensorFlow 1 и 2, вместо этого я сосредоточусь только на том, как использовать TensorFlow 2. Под этим я подразумеваю, что я расскажу вам, как классифицировать рак или нет. рака, используя общедоступный набор данных с TensorFlow 2.

Итак, вот оно.

В первую очередь установка TensorFlow 2 для Python.

Установка довольно проста. Использование инструмента установки пакетов Python (pip) позволяет быстро выполнить эту работу. (Эта часть была довольно сложной в первые дни существования TensorFlow 2.)

После этого не забудьте подтвердить установку, распечатав номер версии. К моменту 2020.04.18 вы должны ожидать вывода чего-то вроде '2.2.0-rc2'.

Во-вторых, позвольте мне представить вам набор данных, использованный в этом посте. Набор данных официально называется UCI ML Cancer Cancer Wisconsin (Diagnostic). (Многие организации публикуют свои данные, чтобы любой человек в мире мог помочь проанализировать данные и узнать что-то новое. Этот набор данных — один из таких.)

Теперь вместо загрузки данных по ссылке выше мы можем просто использовать sklearn для загрузки набора данных. Введение sklearn выходит за рамки этого поста. Если вы этого еще не знаете, спросите у Google. Это будет стоить вам хорошо.

И код Python для загрузки набора данных

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

Этот фрагмент кода разделяет загруженный набор данных на обучающие (x_train, y_train) и тестовые (x_test, y_test) наборы данных, где train = 67% исходного набора данных, а test = 33%.

Обратите внимание, что наличие набора данных проверки обычно предпочтительнее в задачах ML (этот набор данных используется для настройки гиперпараметров, что выходит за рамки этого поста). Но мы проигнорируем это и продолжим наборы данных для обучения/тестирования в поисках простоты.

Теперь это хорошее хобби — «масштабировать» наборы данных обучения/тестирования перед тренировкой. Потому что иногда наборы данных могут содержать как очень большие числа, так и очень маленькие. Масштабирование наборов данных позволяет преобразовать эти числа в один и тот же диапазон, что делает модель более точной. Код для этого

Наконец, после того, как все это сделано. Мы готовы использовать TensorFlow 2. TensorFlow 2 имеет API-интерфейсы Keras, которые позволяют нам довольно просто создавать модели. В то же время он также предоставляет низкоуровневые API и позволяет нам создавать собственные модели (это довольно сложно). Здесь мы пойдем по простому пути и будем использовать Keras для построения нашей модели классификации.

Keras API, который мы будем использовать, называется «Sequential». И мы добавим в модель 2 слоя, входной слой (этот слой необходим для каждой модели) и плотный слой.

Как видно из фрагмента кода, определение модели TensorFlow всегда состоит из двух шагов:

Декларация модели › Компилировать.

На этапе объявления модели нам нужно добавить слои в модель с помощью Keras Layers. Обратите внимание, что размер слоев должен соответствовать форме вашего обучающего набора данных.

После этого нам нужно скомпилировать модель, указав «оптимизатор», функцию «потери» и «метрики» для оптимизации.

Выполнив все эти работы, мы наконец-то можем начать обучение модели, используя наш набор данных поездов. В коде я указываю модель для запуска 100 эпох (эпоха означает прохождение всего набора данных поезда 100 раз). Поскольку наш набор данных поездов довольно мал, достаточно 100 эпох, и это не будет стоить долго.

После завершения обучения мы можем распечатать оценку оценки, используя наборы данных для обучения и тестирования. На моем ПК номер выглядит следующим образом. 2-е число в каждой строке — это показатель «точности», и он очень высокий (>95%). Это означает, что наша модель работает очень хорошо.

Счет поезда: [0,09029368311166763, 0,9842519760131836]

Результат теста: [0,12974153459072113, 0,957446813583374]

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

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

И результат выполнения кода должен выглядеть так.

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

Код для предсказания довольно прост.

Если вы напечатаете p, это будет что-то вроде [[9.86109257e-01], [9.58251834e-01], …]. Цифры можно интерпретировать как «вероятность наличия рака».

Резюме. В этом посте показано, как решать простые задачи классификации с помощью TensorFlow 2.