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

  1. На самом деле это междоменная тема, требующая знаний из нескольких областей и источников, чтобы получить правильное представление о ней.
  2. Он очень динамичный. Каждый день можно встретить что-то новое, чему нужно учиться; будь то с точки зрения фреймворков, литературы, лучших практик и т. д.
  3. Существует множество ресурсов (таких как этот), которые помогут вам в освоении машинного обучения. Однако я лично часто обнаруживал, что вы не можете найти «серебряную пулю», которая могла бы тренировать вас целостно, и поэтому вам нужно тщательно выбирать, с чего начать, не рискуя перегореть. Таким образом, я создал эту статью в виде трамплина, чтобы быстро начать путешествие по машинному обучению.
  4. ML со стороны кажется очень заманчивым и многообещающим. Только когда вы начинаете изучать его (подход сверху вниз), вы понимаете, что вам предстоит пройти трудный путь через сложный отрывок теории и литературы, прежде чем вы действительно созерцаете свое собственное «искусственно разумное существо».

Я лично считаю, что при попытке погрузиться в новый домен следует следовать восходящему подходу (сначала начиная с приложения). Это позволяет вам реализовать потенциал и ограничения этой области. Кроме того, чистая радость от того, что вы можете быстро реализовать приложение предметной области, вызывает достаточную мотивацию, чтобы подпитывать оставшуюся часть пути. Именно по этой причине я курировал этот контент для конкретного приложения, особенно предназначенный для абсолютных новичков, которые хотят проникнуть в область машинного обучения, как можно скорее!! В этой статье мы будем использовать краткое обсуждение ML, которое у нас было в более ранней статье¹. Просто взгляните на это, чтобы получить интересные сведения о том, ЧТО и ПОЧЕМУ ML, прежде чем мы подготовимся к взлету!

Предполагая, что вы прочитали ранее упомянутую статью (вместе с заявлением об отказе от ответственности!), давайте начнем наше путешествие по машинному обучению. Мы создадим самую избитую, но фундаментальную модель машинного обучения: классификатор изображений. Классификатор изображений — это модель, которая может классифицировать данные изображения по разным классам. Характеристики нашего классификатора изображений следующие:

  1. Используемый классификатор будет искусственной нейронной сетью (ИНС).
  2. Изображения, которые мы будем классифицировать, должны быть из набора данных MNIST.

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

Поэтому, прежде чем мы начнем внедрять ИНС, убедитесь, что вы хорошо знаете язык программирования Python, Tensorflow, Keras и имеете персональный компьютер с оперативной памятью не менее 16 ГБ… Шучу! Фактически, с таким инструментом, как TensorFlow, вам не обязательно владеть языком программирования (хотя это рекомендуется для большего контроля над вашими реализациями), а также не нужно знать более глубокие детали того, как работает ИНС. Кроме того, с Google Colab вам не нужна система высокого класса для запуска ваших моделей машинного обучения. Он обеспечивает аккуратную и мощную экосистему, в которой вы можете разработать свою модель с нуля. Самое приятное то, что Google Colab уже поставляется с TensorFlow!

Итак, мы начинаем с Google Colab:

1. Найдите «google colab» в Google и нажмите на первую ссылку.

2. Откроется страница Colab. Нажмите «Файл» (вверху слева) и нажмите «Новый блокнот».

Блокнот — это прекрасный способ писать код/текст, создавать графики и вставлять изображения в одном рабочем пространстве.

3. Вам будет предложено войти в свою учетную запись Google. Просто продолжайте это.

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

Блокнот, по сути, состоит из ячеек, как видно выше (темно-серый прямоугольник вверху). Вы можете выполнять ранее упомянутые функции в этой ячейке. Кроме того, вы можете иметь несколько таких ячеек, тем самым лучше организовав свой контент. С точки зрения кодирования вы можете запускать разные ячейки в разное время. Таким образом, вся программа может быть разбита на несколько разделов. Результаты каждой ячейки будут перенесены в более поздние ячейки для использования, если вам это нужно!

5. Теперь давайте напишем наш первый фрагмент кода. Программа для сложения двух чисел. В первую ячейку напишите следующее:

2+3

Вы только что написали свой первый фрагмент кода! Теперь пришло время запустить его. Просто нажмите кнопку воспроизведения слева от ячейки. Еще один способ запустить ячейку — одновременно нажать «Shift» и «Enter», пока курсор находится внутри ячейки. Как показано ниже, записной книжке может потребоваться некоторое время для инициализации и выделения ресурсов для выполнения вычислений за вас.

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

Вуаля! вы запустили свой первый фрагмент кода в Colab! (Colab активно используется исследователями и энтузиастами машинного обучения, так что это действительно важная веха на вашем пути к машинному обучению). Теперь вы можете удалить эту ячейку, чтобы начать с чистого листа для вашей ИНС. Просто нажмите на значок корзины, который можно найти в правом верхнем углу ячейки.

6. Теперь, когда вы знаете, как писать и запускать код в Colab, мы приступаем к написанию кода для ИНС (на языке программирования Python). У нас будут следующие шаги в нашей реализации ANN:

  • Импорт библиотек. Библиотека — это уже созданное кем-то программное обеспечение, которое можно использовать в соответствии со своими требованиями. Чтобы использовать библиотеку, нужно специально указать ее перед кодом, чтобы во время выполнения было известно, какая библиотека должна использоваться. Мы используем слово «импорт» в Python для обозначения используемых библиотек.
  • Загрузка набора данных. Как обсуждалось в предыдущей статье¹, данные используются для обучения ИНС. Мы будем использовать набор данных MNIST для обучения нашей ИНС. Набор данных MNIST представляет собой набор из 70 000 изображений. 60 000 из них обычно используются для обучения, а остальные — для тестирования ИНС. Все изображения состоят из десятичных цифр от 0 до 9.
  • Определение модели. Перед обучением модель должна быть определена. Требуется определить, сколько и каких типов слоев должно быть в ИНС, сколько нейронов должно быть в каждом слое и какую функцию активации будет использовать каждый слой.
  • Компиляция модели.Компиляция требует определения потерь и параметров оптимизации модели. Это не что иное, как методы вырезания трафарета¹.
  • Подгонка модели.Модель создается так, чтобы «соответствовать» набору данных путем подачи в модель данных и выполнения нескольких циклов обновления и исправления модели. Этот шаг также известен как обучение модели.
  • Прогнозирование. Это последняя часть, в которой вы можете использовать обученную модель для выполнения прогнозов. Изображение дается модели, для которой вы уже знаете класс. Класс, предсказанный моделью, можно сравнить с его «истинным» классом.

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

Итак, давайте закончим кодирование нашей ИНС:

  1. Импорт библиотек. Скопируйте приведенный ниже контент в ячейку и запустите его.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten,Conv2D,MaxPooling2D
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np

Здесь мы будем использовать библиотеку TensorFlow. Из TensorFlow мы импортируем модель «Sequential», которая представляет собой просто стиль для создания моделей ML. Затем мы импортируем различные типы слоев (Dense, Flatten, Conv2D, MaxPooling2D), которые мы будем использовать в нашей ИНС (не беспокойтесь о «типах»). После этого мы импортируем набор данных «mnist», который содержит фактические изображения для обучения нашей ИНС. Tensorflow может многое предложить! (как компоненты ИНС, так и набор данных). Затем мы импортируем библиотеку «matlplotlib», которая позволяет отображать графики и изображения путем преобразования чисел/матриц чисел в изображения. Наконец, мы импортируем библиотеку «numpy», которая упрощает работу с матрицами. Помните, изображения здесь в конечном счете являются сетками или матрицами чисел, над которыми можно выполнять операции, получая больше матриц.

2. Загрузка набора данных. Скопируйте приведенное ниже содержимое в следующую ячейку и запустите его.

(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train = x_train/255
x_test = x_test/255

«mnist.load_data()» просто загружает набор данных MNIST для сеанса вашего браузера. «Загрузка» выполняется в разные переменные (контейнеры контента):

2.1 x_train: переменная, в которой хранятся все изображения для обучения ИНС, также называемые обучающими образцами.

2.2 y_train: переменная, в которой хранятся все метки (номера классов) обучающих выборок.

2.3 x_test: переменная, в которой хранятся все изображения для тестирования ИНС, также называемые образцами для тестирования. Мы не будем использовать это все же.

2.4 y_test: переменная, в которой хранятся все метки (номер класса) тестовых образцов.

Загрузив данные в эти переменные, теперь вы можете использовать изображения этого набора данных. Разделение переменных на 255 в следующей строке — это просто нормализация значения/интенсивности каждого пикселя данных обучения/тестирования («x_train», «x_test»). Это помогает модели тренироваться эффективно и быстро.

3. Определение модели: скопируйте приведенное ниже содержимое в следующую ячейку и запустите его.

model = Sequential([
 Flatten(input_shape = (28,28)),
 Dense(32, activation = ‘relu’),
 Dense(10, activation = ‘softmax’)
])

Как можно заметить, мы создаем «модель» в стиле «Последовательный» (для этого есть и другие стили). Мы также определяем слои модели. Первый слой представляет собой слой «Сглаживание», который преобразует наше двумерное изображение (размером 28x28 пикселей) в одномерный массив чисел, который можно передать в последнюю часть ИНС. Затем у нас есть «плотный» слой, в котором у нас есть 32 нейрона. Каждый из этих нейронов будет принимать значения пикселей нашего изображения в качестве входных данных, суммировать их, применять к ним функцию активации (функция активации «relu» допускает высокий результат только после порога ввода) и затем выдавать результат. Затем у нас есть последний «плотный» слой, который имеет 10 нейронов. Каждый из этих нейронов будет передавать значение из предыдущего слоя и выводить высокое значение в зависимости от класса входного изображения. Например, если входное изображение имеет класс 3, то третий нейрон последнего слоя будет иметь высокий выход (для этого используется функция активации softmax).

4. Компиляция модели. Скопируйте приведенный ниже контент в следующую ячейку и запустите его.

model.compile(loss = "sparse_categorical_crossentropy", optimizer = "adam", metrics = ['accuracy'])

Модель составляется путем определения типа «потери», «оптимизатора» и дополнительных «показателей» для анализа. «потеря» используется для сравнения текущего прогноза (выхода) модели с фактическим классом ввода. «Оптимизатор» используется для настройки параметров модели (соответственно обрезать трафареты¹) в соответствии с «потерей». Существует множество способов как для «потери», так и для «оптимизатора». «Метрики» — это показатели производительности вашей модели, которые вы можете проверить во время ее обучения. Мы хотели бы следить за точностью нашей модели на этапе обучения, поэтому мы используем «точность» в наших «метриках».

5. Подбор модели. Скопируйте приведенный ниже контент в следующую ячейку и запустите его.

model.fit(x_train,y_train,epochs = 5)

Теперь, когда все готово, мы можем «подогнать» нашу модель к данным. Но что уместно? Вернитесь к нашему примеру трафарета из последнего обсуждения¹. Подгонка здесь относится к наложению нашего трафарета на реальный лист и вырезанию трафарета до тех пор, пока созданные таким образом отверстия не совпадут с границей фактического листа, т. Е. Наш трафарет подойдет к листу. Таким образом, для нашей ИНС мы передаем ей как обучающие выборки (x_train), так и их метки (y_train), чтобы подогнать ее к реальному отображению между изображениями и метками (классами). «эпохи» можно понимать как количество раз, которое вы хотите, чтобы ваша модель обучалась на одних и тех же данных. Этот шаг требует времени, в зависимости от «эпох», так как каждый раз модель просматривает все 60 000 изображений набора данных MNIST. Так что наберитесь терпения, пока слева от ячейки не появится зеленая галочка.

Также следите за метрикой «точности» для каждой эпохи, когда печатается статус. Он продолжает увеличиваться в разные эпохи и значительно превышает 0,96 (96 процентов)!

6. Предсказание. Скопируйте приведенное ниже содержимое в следующую ячейку и запустите его.

image_index = 9
plt.imshow(x_train[image_index])
plt.show()
print("The predicted class for the above image is: ",np.argmax(model.predict(x_train[image_index][np.newaxis,...])))

Мы только что создали наш первый «искусственный интеллект»! ИНС была обучена и теперь может использоваться для предсказания класса (метки) изображений для нас. Как мы делаем это? Просто используйте для этого функцию model.predict(). Внутри скобок нам нужно указать изображение, которое мы хотим протестировать. «x_train[image_index][np.newaxis,…]» — это изображение, присутствующее в наборе обучающих данных. «image_index» — это просто индекс (например, серийный номер) изображения, которое мы выбираем для прогнозирования из набора обучающих изображений. Вы можете изменить значение «image_index» с 9 на любое другое значение (в определенных пределах), чтобы предсказать другие образцы изображений. ‘plt.imshow()’, который также принимает изображение внутри скобок, просто отображает изображение, которое мы предсказываем, чтобы мы были уверены в реальном классе.

Как видно выше, предсказанный класс (4) соответствует изображению (номер 4).

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

Вы также должны оценить тот факт, что такая простая модель (всего 3 слоя) способна очень точно классифицировать такую ​​большую коллекцию изображений (60 000 изображений). Представьте себе сложную задачу достижения этого с помощью подхода, основанного на правилах, если вы вообще можете это сделать. В этом сила ИНС. Вишенкой на вершине является то, что вы можете достичь такой производительности, близкой к современной, менее чем за 20 строк кода! Все благодаря TensorFlow.

Я уверен, что к настоящему времени вы были бы рады попробовать что-то новое с ANN; например, добавить к нему больше слоев, протестировать его на невидимых данных, изменить функции активации, изменить количество нейронов и найти изображения, на которых ИНС делает неправильный прогноз (ящик Пандоры сам по себе), почему он должен это делать и как избежать что. Вы также можете узнать о «keras». Теперь я настоятельно рекомендую вам обратить внимание на каждую строку кода, которую мы использовали здесь, в Интернете, и подробно изучить их восходящим подходом. Это поможет вам обрести уверенность в этой реализации и хорошо подготовит вас к предстоящему путешествию в машинное обучение!

До скорой встречи. А пока продолжайте делать свою ИНС умнее!

Использованная литература:

[1] Очень краткий экскурс в человеческий мозг и машинное обучение для начинающих! (https://medium.com/@pandey.suraj3/a-very-brief-peek-into-the-human-brain-and-machine-learning-for-absolute-beginners-4c9b82c77e67)