Давайте исследуем передачу знаний…
Раскрываем тайны обмена знаниями...
Давайте подойдем к этому с помощью нескольких простых вопросов.
- Что такое перенос обучения?
- Зачем он используется и каковы его преимущества?
- Примеры моделей переноса обучения?
Что такое перенос обучения?
Существует много определений, описывающих перенос обучения – это в основном использование знаний предварительно обученных моделей для решения новых задач.
Что такое предварительно обученная модель?
Предварительно обученные модели – это те, которые уже обучены на большом наборе данных.
- В этой статье исследуется модель мозга AI с помощью глубокого обучения продвижение нейронных сетей с использованием идей из нейронауки и руководств по библиотеке snnTorch на языке Python.
- Эта статья о искусственном интеллекте представляет прорывной метод моделирования динамики 3D-сцены с использованием видеорядов с множеством ракурсов.
- Обработка естественного языка раскрытие силы человеческого общения через искусственный интеллект
Зачем он используется и каковы его преимущества?
Перенос обучения имеет множество преимуществ. Обычно при использовании глубоких нейронных сетей обучение с нуля требует большого объема данных и значительной вычислительной мощности. Для преодоления этих проблем перенос обучения оказывается чрезвычайно полезным.
Польза от этого заключается в следующем…
- Требуется меньше вычислительной мощности, поэтому техники переноса обучения могут выполняться с использованием уже существующих ресурсов и небольшого объема локальных обучающих данных. Такой подход позволяет экономить место на диске и время выполнения.
- Поскольку модель уже обучена на большом наборе данных, она может быть обучена на небольшом количестве данных. При использовании такой модели требуется только небольшое количество данных.
- Это позволяет экономить время и увеличивает скорость обучения.
Для более глубокого понимания…
![Image by Author @tejasrimasina2002](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*p3XNfxFSVLByKwLbF16TTg.png)
![Image by Author @tejasrimasina2002](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*3BWQeFBmFnvSoRSjJkkU6A.png)
В этом мы видим, что мы можем изменять плотные слои в соответствии с требованиями нашего приложения.
Примеры моделей переноса обучения?
Существует много предварительно обученных моделей, таких как…
- Xception, ResNet, VGG, MobileNet, Efficient Net, AlexNet и т. д…..
Вы можете проверить здесь
Давайте рассмотрим пример модели переноса и исследуем ее архитектуру.
![Image by Author @tejasrimasina2002](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*IfP9zVQ4CabvAgs1kK-l4w.png)
Модели VGG представляют собой тип архитектуры сверточных нейронных сетей, разработанных Карен Симоняном и Андреем Зиссерманом из группы визуальной геометрии (VGG) в Оксфордском университете. Они достигли замечательных результатов в соревновании ImageNet. Существует две основные вариации: VGG16 и VGG19. Эксперимент включал шесть моделей с разным количеством обучаемых слоев, и среди них наиболее популярными являются VGG16 и VGG19.
VGG была обучена на наборе данных ImageNet, включающем 1,2 миллиона изображений для обучения в 1000 категориях.
Если мы рассмотрим архитектуру VGG16…
![Источник: researchgate.net](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*WhdUuOdLcxKImuMpmFpAGA.png)
Сверточный слой : сверточный слой состоит из набора обучаемых фильтров, которые проходят через операцию свертки на входных данных. С такими фильтрами сеть может изучать иерархические представления данных, которые идентифицируют признаки во входных данных. Для извлечения локальных паттернов, таких как грани или текстуры, каждый фильтр скользит по входу и применяет математическую операцию, помогающую извлекать признаки в нейронных сетях.
В VGG16
Все сверточные слои имеют:
- Размер фильтра = 3×3
- Шаг = 1
- Заполнение = такое же
Max Pooling: Max Pooling уменьшает количество данных, сохраняя при этом основную информацию для эффективного обучения, избегая маленькие изменения в данных, выбирая наибольшие значения из сегментов данных.
У слоев Max Pooling:
- Размер фильтра = 2×2
- Шаг = 2
В первом сверточном слое размер изображения составляет 224x224x64. После этого он сокращается до 112×112.
![Изображение автора @tejasrimasina2002](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*X78Bpuip2ZtXNEYxzO013A.png)
Для более ясного понимания структуры…
![Изображение автора @tejasrimasina2002](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*2mOqORYf2N2eNDm80QhylA.png)
Это связано с Vgg16.
Для более глубокого понимания работы VGG16 рекомендую обратиться к этому ресурсу.
Архитектура VGGNet-16: Полное руководство
Исследуйте и запускайте код машинного обучения с помощью Kaggle Notebooks | Используя данные из нескольких источников
www.kaggle.com
Давайте напишем код для лучшего понимания.
Здесь я хотел бы продемонстрировать на примере кода.
Здесь я использовал набор данных Corn or Maize для задачи классификации, включающей четыре типа классов.
- Болезнь
- Обычная ржавчина
- Серая пятнистость
- Здоровый
![Источник: изображения из набора данных Kaggle](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*WKTcLdBK6udtEGvf2A1RyA.jpeg)
Набор данных по болезням листьев кукурузы или маиса
Классификация болезней кукурузных растений на основе искусственного интеллекта
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](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*MHQCWP3BpQ5dakO7Sb9sdQ.png)
После этого мы компилируем и обучаем модель.
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 вы можете найти все файлы, которые я включил в эту статью.
Спасибо за чтение………