Давайте исследуем передачу знаний…

Раскрываем тайны обмена знаниями...

Давайте подойдем к этому с помощью нескольких простых вопросов.

  1. Что такое перенос обучения?
  2. Зачем он используется и каковы его преимущества?
  3. Примеры моделей переноса обучения?

Что такое перенос обучения?

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

Что такое предварительно обученная модель?

Предварительно обученные модели – это те, которые уже обучены на большом наборе данных.

Зачем он используется и каковы его преимущества?

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

Польза от этого заключается в следующем…

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

Для более глубокого понимания…

Image by Author @tejasrimasina2002
Image by Author @tejasrimasina2002

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

Примеры моделей переноса обучения?

Существует много предварительно обученных моделей, таких как…

  • Xception, ResNet, VGG, MobileNet, Efficient Net, AlexNet и т. д…..

Вы можете проверить здесь

Давайте рассмотрим пример модели переноса и исследуем ее архитектуру.

Image by Author @tejasrimasina2002

Модели VGG представляют собой тип архитектуры сверточных нейронных сетей, разработанных Карен Симоняном и Андреем Зиссерманом из группы визуальной геометрии (VGG) в Оксфордском университете. Они достигли замечательных результатов в соревновании ImageNet. Существует две основные вариации: VGG16 и VGG19. Эксперимент включал шесть моделей с разным количеством обучаемых слоев, и среди них наиболее популярными являются VGG16 и VGG19.

VGG была обучена на наборе данных ImageNet, включающем 1,2 миллиона изображений для обучения в 1000 категориях.

Если мы рассмотрим архитектуру VGG16…

Источник: researchgate.net

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

В VGG16

Все сверточные слои имеют:

  • Размер фильтра = 3×3
  • Шаг = 1
  • Заполнение = такое же

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

У слоев Max Pooling:

  • Размер фильтра = 2×2
  • Шаг = 2

В первом сверточном слое размер изображения составляет 224x224x64. После этого он сокращается до 112×112.

Изображение автора @tejasrimasina2002

Для более ясного понимания структуры…

Изображение автора @tejasrimasina2002

Это связано с Vgg16.

Для более глубокого понимания работы VGG16 рекомендую обратиться к этому ресурсу.

Архитектура VGGNet-16: Полное руководство

Исследуйте и запускайте код машинного обучения с помощью Kaggle Notebooks | Используя данные из нескольких источников

www.kaggle.com

Давайте напишем код для лучшего понимания.

Здесь я хотел бы продемонстрировать на примере кода.

Здесь я использовал набор данных Corn or Maize для задачи классификации, включающей четыре типа классов.

  • Болезнь
  • Обычная ржавчина
  • Серая пятнистость
  • Здоровый

Источник: изображения из набора данных Kaggle

Набор данных по болезням листьев кукурузы или маиса

Классификация болезней кукурузных растений на основе искусственного интеллекта

www.kaggle.com

Набор данных, который я использовал

Теперь часть реализации

Шаг 1: Импорт всех необходимых библиотек

import numpy as npfrom glob import globimport randomimport splitfoldersimport osimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore", category=FutureWarning)

Я разделил набор данных на три части: тренировочный, валидационный и тестовый.

os.makedirs('output1')os.makedirs('output1/train')os.makedirs('output1/val')os.makedirs('output1/test')loc = "/kaggle/input/corn-or-maize-leaf-disease-dataset/data"splitfolders.ratio(loc,output ="output1",ratio = (0.80,.1,.1))

train_path = '/kaggle/working/output1/train'val_path = '/kaggle/working/output1/val'

Изменение размера всех изображений на 224×224.

IMAGE_SIZE = [224, 224]

Шаг 2: Импортирование модели и ее библиотек

import tensorflow as tffrom keras.layers import Input, Lambda, Dense, Flattenfrom keras.models import Modelfrom keras.applications.vgg16 import VGG16from keras.applications.vgg16 import preprocess_inputfrom keras.preprocessing import imagefrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequential

Шаг 3: Обучение модели

model = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)

IMAGE_SIZE + [3]

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

weights=’imagenet’

Мы используем веса из ImageNet.

include_top=False

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

for layer in model.layers:    layer.trainable = False

Этот шаг важен, потому что мы не хотим переобучать уже обученные слои в модели, поэтому мы устанавливаем его как false.

После этого мы можем добавить наши полносвязные слои.

x = Flatten()(model.output)prediction = Dense(len(folders), activation='softmax')(x)model = Model(inputs=model.input, outputs=prediction)model.summary()
Изображение от автора @tejasrimasina2002

После этого мы компилируем и обучаем модель.

model.compile(optimizer=tf.keras.optimizers.Adam(),             loss='categorical_crossentropy',            metrics = ['accuracy'])

r = model.fit_generator(  training_set,  validation_data=val_set,  epochs=10,  steps_per_epoch=len(training_set),  validation_steps=len(val_set))

Вывод

Я получил точность проверки 89.92%.

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

GitHub – Tejasri-123/Corn-Classification

github.com

В репозитории GitHub вы можете найти все файлы, которые я включил в эту статью.

Спасибо за чтение………

Фото Jon Tyson на Unsplash