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

Первый ИИ обыграл нас в шахматы

Потом они стали лучшими юристами

Возможности ИИ безграничны.

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

По данным Всемирной организации здравоохранения, только в 2017 году было зарегистрировано около 220 миллионов случаев малярии, а число погибших превысило 500 000 человек.

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

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

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

Что такое CNN?

Сверточная нейронная сеть - это просто набор различных фильтров. Порядок этих типов слоев и степень их использования определяют, насколько хорошо работает сеть.

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

Слои свертки

Эти слои делают свёрточные нейронные сети уникальными. (Поэтому буквально в названии).

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

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

Желтая таблица 3x3 - это фильтр, который проверяет на изображении определенный тип узора, который называется характеристикой. Если вы классифицируете автомобиль, у вас может быть один фильтр для колес, другой для окон и т. Д. Этот фильтр называется картой характеристик.

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

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

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

Объединение слоев

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

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

Они запускаются после сверточного слоя. Помните, что значения в запутанном слое представляют, как присутствует определенная функция на изображении. Таким образом, max-pooling избавляется от всех небольших чисел, так что нейронная сеть просто получает список присутствующих функций и степени их присутствия.

Другой тип объединения - это средний пул. Здесь берется среднее значение площади, а не только самое высокое значение. Максимальный пул, как правило, используется более широко.

Полностью связанный слой

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

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

Затем этот слой обучается назначать каждой характеристике определенное слово в том, к чему относится изображение.

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

Затем эти функции передаются в выходные узлы. Количество выходных узлов зависит от количества объектов, которые модель обучена классифицировать.

Подробнее о том, как нейросеть назначает веса, можно узнать здесь.

Как я построил свою модель

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

Каждый раз, когда я вызываю функцию «model.add», я просто добавляю слой в структуру нейронной сети.

«Conv2d» - это просто двухмерный сверточный слой (поскольку мы имеем дело с двумя изображениями). 64 представляет количество объектов, для которых тестируется слой. 3x3 определяет размер карты объектов. Форма ввода определяет размер вводимого изображения. 3 представляет слои RGB. Функция активации relu просто превращает все отрицательные числа в нули.

«MaxPooling2D» - это просто 2D-слой с максимальным объединением. (2, 2) определяют размеры фильтра. Это означает, что он всегда будет принимать наивысшее значение из каждого раздела изображения 2x2.

Слой исключения указывает слою случайным образом отключать узлы во время обучения. (0,2 означает, что вероятность того, что они будут отключены, составляет 20%). Я сделал это, потому что иногда нейронные сети позволяют одной части сети доминировать над другими частями, и тогда другие части не обучаются.

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

Слой «Flatten» просто берет двухмерную матрицу и превращает ее в одномерную матрицу. например сведение слоя 4x5 в матрицу 20x1.

Плотный слой просто добавляет слой с определенным количеством узлов. (В данном случае их 64). Это полностью связанный слой, который присваивает вес каждому объекту. Вы, наверное, помните, что у меня был первый сверточный слой, выводящий 64 объекта. Вот почему этот плотный слой имеет 64 узла: по 1 для каждого объекта.

Последний плотный слой имеет количество узлов, эквивалентное количеству классов, которые определяет сеть. В этом случае эта переменная установлена ​​на 2. Этот уровень использует функцию активации softmax вместо relu. Это просто гарантирует, что итоговые результаты в сумме будут равны единице. Таким образом, мы получаем процентную вероятность для каждого класса. Например. окончательные результаты могут быть 0,76 и 0,24. Это означает, что с вероятностью 76% изображение относится к одному классу и с вероятностью 24% - к другому.

Последняя строка кода сообщает сети, для чего следует оптимизировать и как рассчитать потери (насколько плохо у нее дела).

После прохождения 40 тренировочных циклов (известных как эпохи) моя модель изменилась:

Epoch 1/40
40/40 [==============================] - 188s 5s/step - loss: 0.7726 - acc: 0.5260 - val_loss: 0.6968 - val_acc: 0.4700

точность 47%, до:

Epoch 40/40
40/40 [==============================] - 132s 3s/step - loss: 0.1700 - acc: 0.9500 - val_loss: 0.2158 - val_acc: 0.9637

96% точность.

Моя модель имела точность 96%! Если бы я проверил модель еще на большее количество эпох, я бы, вероятно, смог бы получить еще больше!

Это превосходит методы диагностики с помощью микроскопии, точность которых составляет всего 93%.

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

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

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

Спасибо за прочтение! Если вам понравилась эта статья:

  • Оставь несколько хлопков 👏
  • Следуйте за мной в Medium и свяжитесь со мной в LinkedIn, чтобы быть в курсе моих работ!
  • Подпишитесь на мою рассылку, чтобы следить за моим путешествием !: