Поздоровайтесь с «Привет, мир» машинного обучения

1. Прежде чем начать

В этой лабораторной работе вы изучите основы машинного обучения «Hello, World», где вместо программирования явных правил на языке, таком как Java или C++, вы создадите систему, обученную на данных, чтобы вывести правила, определяющие отношения между числами.

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

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

Вы можете расширить это до работы с другим условием.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

В конечном состоянии вы могли бы точно так же обнаружить зацикливание.

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

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

fc772abb6fee2804.png

// Now what?

Чрезвычайно сложно написать программу, которая распознает игру в гольф, так что же делать? Вы можете использовать ML для решения проблемы!

Предпосылки

Перед тем, как приступить к работе с этой кодовой лабораторией, вам необходимо:

  • Уверенное знание Python
  • Базовые навыки программирования

Что вы узнаете

  • Основы машинного обучения

Что вы будете строить

  • Ваша первая модель машинного обучения

Что вам понадобится

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

Если вы используете другую IDE, убедитесь, что у вас установлен Python. Вам также понадобится TensorFlow и библиотека NumPy. Узнать больше о TensorFlow и установить его можно здесь . Установите NumPy здесь.

2. Что такое машинное обучение?

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

c72f871306134e45.png

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

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

9b85a337ee816e1b.png

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

6ff58697a85931f4.png

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

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

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

Итак, если вернуться к этой диаграмме:

53ff9e2cb511936e.png

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

693430bb4d7fa001.png

Вы передаете модели некоторые данные, и модель использует правила, которые она вывела из обучения, чтобы сделать прогноз, например: «Эти данные похожи на ходьбу» или «Эти данные похожи на езду на велосипеде».

3. Создайте свою первую модель машинного обучения

Рассмотрим следующие наборы чисел. Вы видите связь между ними?

ИКС:

-1

0

1

2

3

4

Д:

-2

1

4

7

10

13

Глядя на них, вы можете заметить, что значение X увеличивается на 1 при чтении слева направо, а соответствующее значение Y увеличивается на 3. Вероятно, вы думаете, что Y равно 3X плюс-минус что-то. Затем вы, вероятно, посмотрите на 0 на X и увидите, что Y равно 1, и вы придете к соотношению Y=3X+1.

Почти точно так же можно использовать код для обучения модели выявлению закономерностей в данных!

Теперь посмотрите на код, чтобы сделать это.

Как бы вы обучили нейронную сеть выполнять аналогичную задачу? Использование данных! Скармливая ему набор X и набор Y , он должен быть в состоянии выяснить взаимосвязь между ними.

Импорт

Начните с вашего импорта. Здесь вы импортируете TensorFlow и называете его tf для простоты использования.

Затем импортируйте библиотеку под названием numpy , которая легко и быстро представляет ваши данные в виде списков.

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

import tensorflow as tf
import numpy as np
from tensorflow import keras

Определить и скомпилировать нейронную сеть

Далее создайте максимально простую нейронную сеть. У него есть один слой, этот слой имеет один нейрон, и входная форма для него — это только одно значение.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

Затем напишите код для компиляции вашей нейронной сети. При этом вам нужно указать две функции — loss и optimizer .

В этом примере вы знаете, что отношения между числами Y=3X+1.

Когда компьютер пытается это узнать, он делает предположение, возможно, Y=10X+10. Функция loss сравнивает предполагаемые ответы с известными правильными ответами и измеряет, насколько хорошо или плохо они справились.

Затем модель использует функцию optimizer , чтобы сделать еще одно предположение. Основываясь на результате функции потерь, он пытается минимизировать потери. На данный момент, возможно, он придумает что-то вроде Y=5X+5. Хотя это все еще довольно плохо, это ближе к правильному результату (потери ниже).

Модель повторяет это для количества эпох , которое вы скоро увидите.

Во-первых, вот как сказать ему использовать mean_squared_error для потерь и стохастический градиентный спуск ( sgd ) для оптимизатора. Вам пока не нужно понимать математику для них, но вы можете видеть, что они работают!

Со временем вы изучите различные и подходящие функции потерь и оптимизатора для различных сценариев.

model.compile(optimizer='sgd', loss='mean_squared_error')

Предоставьте данные

Затем введите некоторые данные. В этом случае вы берете шесть переменных X и шесть переменных Y из предыдущего. Вы можете видеть, что отношение между ними таково, что Y = 3 X +1, поэтому, где X равно -1, Y равно -2.

Библиотека Python под названием NumPy предоставляет для этого множество структур данных типа массива. Укажите значения в виде массива в NumPy с помощью np.array[] .

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

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

4. Обучите нейронную сеть

Процесс обучения нейронной сети, когда она изучает отношения между X и Y , находится в вызове model.fit . Вот где он будет проходить через цикл, прежде чем сделать предположение, измерить, насколько это хорошо или плохо (потери), или использовать оптимизатор, чтобы сделать еще одно предположение. Это будет сделано для указанного вами количества эпох. Когда вы запустите этот код, вы увидите, что потери будут распечатаны для каждой эпохи.

model.fit(xs, ys, epochs=500)

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

f110d5abed07c1b9.png

По мере обучения потери вскоре становятся очень маленькими.

81ca5e71298b414b.png

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

12b187014b639fd.png

Вам, вероятно, не нужны все 500 эпох, и вы можете поэкспериментировать с разными количествами. Как видно из примера, потери действительно малы уже после 50 эпох, так что этого может быть достаточно!

5. Используйте модель

У вас есть модель, обученная изучать взаимосвязь между X и Y. Вы можете использовать метод model.predict , чтобы вычислить Y для ранее неизвестного X. Например, если X равно 10, что вы думаете? Y будет? Сделайте предположение, прежде чем запускать следующий код:

print(model.predict([10.0]))

Вы могли подумать, что 31, но оказалось, что это немного больше. Как вы думаете, почему?

Нейронные сети имеют дело с вероятностями, поэтому они подсчитали, что существует очень высокая вероятность того, что отношение между X и Y равно Y=3X+1, но они не могут знать наверняка только по шести точкам данных. Результат очень близок к 31, но не обязательно 31.

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

6. Поздравления

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

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

Учить больше

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