Если вас когда-нибудь очаровали слова «машинное обучение», «искусственный интеллект», «глубокое обучение», «нейронные сети», «бла…бла…», то теперь вам не нужно их пугать.
Если вы новичок, то абсолютный! затем эти несколько минут повысят вашу уверенность и проложат правильный путь к началу пути к глубокому обучению и искусственному интеллекту.

Что такое глубокое обучение?
Проще говоря, глубокое обучение — это член семьи машинного обучения, сила которого находится в руках искусственных нейронных сетей.

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

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

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

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

Предварительные требования, прежде чем вы начнете свой путь к глубокому обучению:-
1) Уделите немного матричной математике и базовой алгебре.
2) Базовые знания о том, как работает язык Python.
3) Библиотеки Python: в частности, NumPy, Pandas, Matplotlib, sklearn очень помогут.
4) Вы должны знать, как работать с Jupyter Notebooks.
5) Пятое и самое главное — терпение , вы должны быть достаточно терпеливы, чтобы дать себе некоторое время, чтобы усвоить то, что вы узнали.

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

Этот тип работы, когда мы предоставляем данные нашей модели, и она предсказывает «да» или «нет», называется бинарной классификацией.

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

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

Вся работа выполняется в среде Python 3.6 в блокноте Jupyter.

Во-первых, мы импортируем все необходимые пакеты, которые потребуются при создании модели.

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

Давайте теперь посмотрим, как выглядят наши данные:

Этот код помогает нам отобразить изображение на 68-й позиции в файле train_set_x_orig. Строка y=1 говорит нам, что это изображение кошки.

Если это было y=0, то это изображение не представляет кошку.

Как мы видим здесь, это изображения аэрозольных баллончиков, а этикетка здесь показывает нам, что y = 0, что означает, что данное изображение не принадлежит кошке.

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

Мы ясно видим, что обучающий набор содержит 209 изображений, а тестовый набор содержит 50 изображений.
Каждое изображение имеет размеры 64x64x3, где 3 представляет цветовую сетку RGB, а 64x64 означает высоту и ширину изображений.

Для удобства теперь мы должны преобразовать изображения формы (num_px, num_px, 3) в массив NumPy формы (nump_px * num_px *3,1). После этого наш обучающий и тестовый набор данных представляет собой массив NumPy, где каждый столбец представляет собой сглаженное изображение. Должны быть столбцы m_train.

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

На данный момент мы сделали следующее:
1) выяснили размеры и формы проблемы.
2) изменили наборы данных таким образом, что теперь каждый пример представляет собой вектор размера (64*64*). 3,1)
3) Данные стандартизированы.

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

Теперь основные шаги для построения нейронной сети:

  1. Определите структуру модели (например, количество входных функций).
  2. Инициализируйте параметры модели
  3. Петля:

Рассчитать потери тока (прямое распространение)
Рассчитать градиент тока (обратное распространение)
Обновить параметры (градиентный спуск)

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

Итак, это сигмовидная функция, которая в основном используется для преобразования любого значения в диапазоне от 0 до 1.

Здесь мы реализовали инициализацию параметра в ячейке ниже.

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

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

  1. Мы инициализировали наши параметры
  2. Мы также можем вычислить функцию стоимости и ее градиент.
  3. Теперь нам нужно обновить параметры с помощью градиентного спуска.

Для параметра w правило обновления w=w-(learning_rate * dw).

Предыдущая функция выведет изученные w и b. Мы можем использовать w и b для предсказания меток для набора данных x.

  1. Рассчитать yhat = A = сигмоид (w ^ t * x + b)
  2. Преобразуйте записи в 0 (если активация ≤0,5) или 1 (если активация >0,5), сохраните все прогнозы в векторе Y_prediction.

Теперь объединим все функции в одну модель. Но перед этим давайте обсудим, что мы уже сделали:

Мы реализовали несколько функций, которые инициализируют (w, b), итеративно оптимизируют потери для изучения параметров (w, b), вычисляют стоимость и ее градиент — обновляют параметры с помощью градиентного спуска — используют изученный (w, b) для предсказать метки для данного набора примеров.

Теперь мы увидим, как структурирована общая модель, собрав вместе все строительные блоки в правильном порядке.

Теперь обучим нашу модель:

Мы видим, что мы достигли точности обучения 99 процентов и точности теста 70 процентов. Точность обучения близка к 100 процентам. это хорошая проверка работоспособности: наша модель работает и имеет достаточно высокую производительность, чтобы соответствовать обучающим данным. Точность теста составляет 70 процентов. Для этой базовой и самой базовой модели это неплохо.

Давайте посмотрим, правильно ли наша модель классифицирует изображение:

Мы также можем протестировать нашу модель с нашим собственным изображением:

  1. Добавьте свое изображение в каталог блокнота Jupyter, в папку «images».
  2. Измените имя вашего изображения в следующем коде
  3. Запустите код и проверьте правильность алгоритма (1 = кошка, 0 = не кошка)

Если это кошка, то будет отображаться, что это «кошка».

И теперь мы закончили.

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

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