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

Услуги для ML и NN включают TensorFlow, PyTorch, ML4J, Caffe, Scikit learn и многие другие. Не волнуйтесь, если они вам не кажутся знакомыми. Эти фреймворки в основном позволяют нам писать эффективный код за 10–30 (обычно), что в противном случае потребовало бы сотен строк кода для реализации теоретических знаний. Они даже позволяют нам работать на гораздо более быстрых устройствах (графических процессорах), что экономит нам дни обучения.

В этой статье я расскажу о некоторых основах TensorFlow.

Импорт набора данных

В этой статье я буду использовать набор данных, предоставленный Tf, но это не обычный случай. Мы загружаем набор данных из Интернета и пытаемся делать прогнозы на его основе. Обычное дерево каталогов набора данных будет выглядеть примерно так:

cats-v-dogs
|
|--training
|  |
|  |--cats
|  |
|  |--dogs
|
|--testing
   |
   |--cats
   |
   |--dogs

Базовый каталог содержит 2 подкаталога (обучение и проверка / тестирование), которые, в свою очередь, содержат разные классы в виде папок с каждым изображением класса внутри соответствующей папки. Затем мы будем использовать Tf для чтения из набора данных. Одна из лучших вещей в использовании Tf - это то, что мы можем генерировать больше изображений во время обучения, не сохраняя их на вашем локальном диске.

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

Примечание. Убедитесь, что вы используете правильный training_dir, как описано в древовидной структуре.

Определение модели

Это самая важная часть. Определяем структуру модели. Для изображений мы обычно включаем несколько convolution, max_pooling слоев для выделения признаков.

Включение слоя очень просто:

tf.keras.layers.Conv2D(32, (3,3), activation='relu')

Нам нужно построить последовательность слоев, и Tf позволяет нам это сделать, указав такие слои, как:

Вы даже можете добавить отсевы, слои пакетной нормализации. Но пока это исключено. Вы можете добавить эти слои аналогичным образом, вызвав соответствующие классы. С model.summary() вы получите подробную информацию о структуре модели, output_shape каждого слоя и количестве параметров.

Примечание. Нейроны в последнем Dense слое должны соответствовать классам прогнозирования. В приведенном выше случае, поскольку мы прогнозируем либо 0/1, для принятия решения достаточно одного нейрона. Вам даже нужно следить за функцией активации, которую вы используете. Вы можете изменить его на softmax для многоклассовой классификации.

Обучение модели

После сбора данных и определения модели вы можете обучить ее предсказывать данные проверки. Мы определяем epochs как количество раз, которое модель должна перебирать данные. Но если вы хотите прекратить обучение модели после того, как мы достигнем удовлетворительной точности, это доступно в Tf.

С помощью приведенного ниже кода вы можете создать собственный класс CallBack:

Благодаря этому мы можем сэкономить некоторые ресурсы и вычислительные усилия, а также время на обучение.

Обучение проводится по следующему коду:

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

Ура! Теперь вы знакомы с основами Tf и готовы построить свою собственную модель и обучиться. Если вы хотите начать с относительно более простого набора данных, я бы порекомендовал вам набор данных MNIST (который часто называют «Hello World» в ML). Он содержит 70 000 изображений, из которых 60 000 предназначены для обучения, а 10 000 - для тестирования. Я дам ссылку на код ниже (более простой NN).

Код классификации набора данных MNIST можно найти здесь.

  • Если вам понравилась статья, хлопайте в ладоши.
  • Если вы хотите сотрудничать, свяжитесь со мной.
  • Если вы хотели просмотреть некоторые из моих проектов, зайдите в мой профиль на GitHub.
  • Если у вас есть предложения, напишите их в разделе комментариев ниже или напишите мне.