ОБНАРУЖЕНИЕ И КОЛИЧЕСТВЕННАЯ ОЦЕНКА ПАРАЗИТА МАЛЯРИИ С ИСПОЛЬЗОВАНИЕМ НЕЙРОННЫХ СЕТЕЙ

МОИ ОБУЧАЮЩИЕ АРХИВЫ ДЛЯ ЭТОГО ПРОЕКТА

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

Сверточные сети

Процедура сверточной реализации проходит четыре (4) этапа:

1. СВЕРТКА

2. МАКСИМАЛЬНОЕ ОБЪЕДИНЕНИЕ

3. ВЫПОЛНЕНИЕ

4. ПОЛНОЕ СОЕДИНЕНИЕ

Все это будет хорошо объяснено, когда мы строим и реализуем проект.

Мы используем пакеты и библиотеки KERAS и TENSORFLOW для выполнения наших сверток. Мы начали с импорта необходимых библиотек следующим образом:

последовательный импорт из keras.models

из keras.layers импортировать Convolution2D

из keras.layers импортировать MaxPooling2D

из keras.layers импортировать Flatten

импорт из keras.layers Dense

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

Мы используем сверточные сети для классификации изображений и других наборов 2D-данных. Ниже приведены основные шаги после предварительной обработки данных, которые мы выполняем для достижения наших сложных результатов:

ШАГ 1 СВЕРТКА:

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

Обратите внимание, что карта объектов определяет по пикселям.

ИЗОБРАЖЕНИЕ СВЕРТКИ ПРИХОДИТ ЗДЕСЬ….ПРОВЕРЬТЕ GOOGLE

Результатом Convolution является не только обнаружение признаков, но и их сохранение. Это достигается путем вытеснения всех других ненужных функций и сохранения тех, которые важны для процесса обучения. Следовательно, исходное изображение уменьшается в размере, скажем, с матрицы 7x7 до матрицы 5x5. Это сеть делает для того, чтобы сфокусировать свое видение на необходимых функциях изображения. Все созданные карты объектов помещаются в сверточный слой, а затем переходят к следующему этапу. Мы создали много карт объектов в другом, чтобы получить наш первый сверточный слой. Мы создали несколько карт объектов, потому что используем разные фильтры (детекторы объектов).

#инициализация CNN

classifier=Sequential()……………… здесь мы создали объект функции keras Sequential

Сеть свертки использует последовательную функцию в библиотеке keras для создания слоев свертки с использованием синтаксиса classifier.add(Convolution2D(32,3,3, input_shape=(64,64,3), активация = 'relu')) здесь мы указываем количество фильтров (детектор признаков), которые мы хотим применить, потому что для каждого используемого фильтра будет создана одна карта признаков. Поскольку идеально начинать с 32 карт объектов, мы начали с них, а затем определили нет. строк и столбцов для нашего детектора признаков (3 x 3). Кроме того, мы интегрировали нашу входную форму, сначала проанализировав размеры наших 2D-массивов как 64x64: хотя они были небольшими, нам пришлось начать с этого малого, учитывая, что этот проект был построен и протестирован на ЦП в качестве его среды разработки, но по мере нашего продвижения, мы бы проверили это на более высоких измерениях. Число «3», проанализированное в нашей функции input_shape, имеет большое значение для трехмерных входных изображений, которые мы анализируем в нашей CNN. Следовательно, его цвета RGB сохраняются. Обратите внимание, что мы используем бэкэнд tensorflow, поэтому параметры input_shape пришли в этом порядке, иначе, если вы используете бэкэнд TNL, они должны идти в обратном порядке. Далее идет функция активации. Функция активации, которую мы используем в нашей CNN, — это функция выпрямления, называемая RELU: она предназначена для удаления отрицательных пикселей и усиления нелинейности в нашей классификации, поскольку классификация изображений не является -линейная задача. Теперь наш сверточный слой готов к добавлению в нашу CNN, поэтому просто выберите всю строку кода, которую мы только что создали, и запустите ее! Сделанный! Добавлен сверточный слой! . Теперь мы позаботились об этапе свертки, теперь идет этап объединения.

ШАГ 2. МАКСИМАЛЬНОЕ ОБЪЕДИНЕНИЕ

Шаг объединения довольно прост; он просто состоит в уменьшении размера ваших карт объектов, созданных на этапе свертки. Итак, что здесь происходит, так это то, что матрица с пустыми ячейками 2x2 перемещается по всей нашей карте (картам) объектов, тем самым беря максимум с 4 фигурами на карте объектов, на которой она опирается, когда она перемещается по картам объектов. Таким образом, за каждый ход в пределах карты объектов он берет максимальное число и заполняет его другой пустой матрицей 3x3 (или, в зависимости от обстоятельств), называемой КАРТА ОБЪЕДИНЕННЫХ ФУНКЦИЙ. Это то, что породило после применения каждого объединения на каждой карте объектов. Таким образом, у нас есть то же количество объединенных карт объектов, что и у карт объектов после начального процесса свертки. Единственное, что изменилось, — это размер карты объектов. Кроме того, максимальное объединение дает пространственную инвариантность картам объектов, поэтому всякий раз, когда изображение анализируется с любым положением или наклоном, оно все равно будет определять, что это одно и то же изображение. Стоит также отметить, что мы двигаем квадратную таблицу, представляющую нашу свернутую карту объектов, слайдом из двух, а не слайдом из одного. То есть пустая матрица 3x3 перемещается по свернутой карте объектов, перескакивая через каждые два столбца, на которых она ранее полностью опиралась. Итак, после применения максимального объединения ко всем нашим картам объектов у нас теперь есть новый слой, состоящий из всех этих уменьшенных карт объектов, и этот слой называется СЛОЙ ОБЪЕДИНЕНИЯ. Итак, одна из основных причин, по которой мы используем максимальное объединение заключается в том, что размер карт признаков уменьшается, тем самым уменьшая количество узлов в наших полностью связанных слоях в нейронной сети, следовательно, сложность и время вычислений уменьшаются, но производительность сохраняется. Если карты объектов не будут уменьшены, у нас будет много узлов, с которыми придется иметь дело, что приведет к увеличению сложности и времени вычислений. Это, в свою очередь, влияет на масштабируемость нашей модели. Теперь переходим к реализации:

Classifier.add(MaxPooling2D(pool_size=(2,2))

Это строка кода, которую мы использовали для реализации нашего пула на наших свернутых картах объектов. Если вы заметили, у нас есть pool_size() в качестве параметра, который мы проанализировали в функции «MaxaPooling2D», да! это аргумент, который мы используем, чтобы указать размер нашей матрицы, которая перемещается по карте объектов за два слайда. Размер 2x2 указывает на то, что в нашем проекте мы использовали размерную матрицу 2x2. Итак, давайте запустим!

ШАГ 3 — — — СВОДКА

Шаг выравнивания заключается в том, чтобы взять все наши объединенные карты объектов и зафиксировать их в единый одномерный вектор, который в конечном итоге будет служить входным слоем нашей ИНС на следующем этапе. Это, конечно, будет огромным вектором, потому что даже если мы уменьшим размер карт объектов и разделим их на 2, у нас все равно останется много объединенных карт объектов для передачи в наш входной слой ИНС, но, тем не менее, хорошая часть свертка и объединение, которые мы сделали, заключались в том, что специфические и специальные функции нашего входного изображения (ов) были сохранены и сохранены как большие числа в наших объединенных картах объектов, которые затем помещаются во входной слой ИНС. Каждая сохраненная или сохраненная функция входного изображения помещается в каждый из узлов нашего входного слоя. Давайте продолжим и реализуем это в нашем проекте с помощью следующей строки кода, но на этот раз он не получает никаких параметров.

Classifier.add(Flatten())

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

ШАГ 4 — — — ПОЛНОЕ ПОДКЛЮЧЕНИЕ

Фаза полного соединения состоит из создания классической ИНС, состоящей из полностью связанных слоев. Мы будем использовать одномерный вектор в качестве входного слоя для ИНС. Мы используем ИНС здесь, потому что ИНС является отличным классификатором для нелинейных задач, и поскольку здесь мы имеем дело с проблемой нелинейной классификации, она пригодится. Здесь было бы идеально классифицировать и сообщать нам, заражено ли каждое изображение или нет. И прямо сейчас, поскольку у нас уже есть наш входной слой, единственное, что нам нужно сделать, это создать скрытый слой с именем FULLY CONNECTED LAYER, а затем нам нужно будет создать ВЫХОДНОЙ слой, который идеальная практика для инициализации ANN. Ожидается, что выходной слой даст нам двоичный вероятностный результат, поэтому нам необходимо в конечном итоге включить сигмовидную функцию в его вызов. Следующая строка кода создает скрытый слой:

classifier.add(Dense(output_dim=128, активация=’relu’)) #создает скрытый слой, т.е. полносвязный слой

classifier.add(Dense(output_dim= 1, активация=’sigmoid’)) # создает выходной слой

Как видно выше, объект классификатора получает аргумент с именем Dense. Это функция, которую мы используем для создания полностью связанного слоя. Плотная функция ожидает параметр с именем "output_dim", который обозначает количество узлов в скрытом (полностью связанном слое) и, конечно же, там нет правила относительно того, сколько узлов назначать вашему скрытому слою, но вы не хотите, чтобы он был слишком маленьким, учитывая количество узлов в вашем входном слое, и вы не хотите, чтобы он был слишком большим, учитывая вычисления. Таким образом, общепринятая практика рекомендует число узлов около 100 и выше или чуть ниже. Ниже приведена функция активации. Мы использовали функцию выпрямления "relu" для увеличения нелинейности. Обратите внимание, здесь мы не используем сигмоид.

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

Теперь мы сделали все 4 шага, и теперь нам нужно скомпилировать всю модель.

СОСТАВЛЕНИЕ ВСЕЙ МОДЕЛИ

Следующая строка кода компилирует нашу модель:

classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Все еще задействуя объект классификатора, на этот раз мы используем функцию компиляции для анализа параметров.

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

происхождение по имени 'адам' .

ПЕРЕХОДИМ К ПРЕДВАРИТЕЛЬНОЙ ОБРАБОТКЕ ДАННЫХ

ЧАСТЬ 2. ПОДГОТОВКА НАШЕГО CNN К НАШИМ ИЗОБРАЖЕНИЯМ

Мы собираемся выполнить процесс IMAGE AUGUMENTATION для наших данных, чтобы избежать переобучения. Переобучение здесь происходит, когда у вас высокая точность на тренировочном наборе, но низкая точность на тестовом наборе. Увеличение изображения выполняется из библиотеки Keras.

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

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

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

ТЕПЕРЬ НАШ CNN ПО ОБНАРУЖЕНИЮ МАЛЯРИИ ГОТОВ С ТОЧНОСТЬЮ ………..

ИТАК, МОЕМ ПК И ЖЕСТКИМ ДИСКОМ ОБЪЕМОМ 8 Гбайт потребовалось 4 ЧАСА, ЧТОБЫ ОБУЧИТЬ МОДЕЛЬ CNN НА 10 000 ИЗОБРАЖЕНИЙ (8000 ОБУЧЕНИЕ И 2000 ТЕСТИРОВАНИЕ)……упс! И мы готовы к работе!!!

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

Итак, я начал тестировать модель CNN в 21:30 и закончил в 23:45, примерно через 2 часа 15 минут.

Это обучение было выполнено без дополнительного слоя свертки и объединения.

Итак, для 8000 изображений поездов и 2000 изображений тестовых наборов за время вычислений 2 часа 15 минут я получил точность обучения 95% и точность теста 92%…….УРА!!!

ВТОРОЕ ОБУЧЕНИЕ:

ВТОРОЕ ОБУЧЕНИЕ ПРОВОДИЛОСЬ С 26 000 ИЗОБРАЖЕНИЙ: 20 000 ПОЕЗДНЫХ И 6000 ТЕСТОВЫХ НАБОРОВ СООТВЕТСТВЕННО, И ЭТО БЫЛО ПРОДЕЛАНО БЕЗ ДОПОЛНИТЕЛЬНОГО ОБЪЕДИНЕНИЯ И СВЕРТОЧНЫХ СЛОЕВ. ОБУЧЕНИЕ НАЧАЛОСЬ В 20:55 И ЗАКОНЧИЛОСЬ в 11:15 следующего дня, ТАКИМ ОБРАЗОМ ЗАНИМАЯ ПРИБЛИЗИТЕЛЬНО 14 ЧАСОВ ВЫЧИСЛИТЕЛЬНОГО ВРЕМЕНИ. В идеале это должно было занять около 5 часов и 30 минут, но из-за частого отключения электроэнергии в этой части мира это заняло намного больше времени, чем обычно. МЫ ПОЛУЧИЛИ ТОЧНОСТЬ 95% В ПОЕЗДЕ И 92% В ИСПЫТАТЕЛЬНОМ НАБОРЕ.

Затем я добавил дополнительный сверточный слой и объединяющий слой. Вычисления начались в 14:32 и закончились в 23:10 и были продлены, опять же из-за частых отключений электроэнергии. У нас была точность обучения 96% и точность теста 95%. Предположительно, это не указывало на какие-либо тенденции к переоснащению, поскольку разница между нашей поездкой и точностью теста минимальна.

NB: Чука помните, что ваша ошибка в тесте была минимальной в 13-й эпохе, следовательно, вы должны поэкспериментировать с тренировкой на своей NN всего в 13-й эпохе, чтобы увидеть, как она себя ведет.

Различные методы регуляризации в глубоком обучении:

1. Регуляризация L2 и L1

2. Отсев

3. Увеличение данных

4. Ранняя остановка