В Части 1 и Части 2 мы разработали неглубокую и более глубокую CNN для обнаружения наличия рака меланомы по изображениям поражений. Мы экспериментировали с такими методами, как пакетная нормализация, прерывание, нормализация локального отклика, простое увеличение данных, стандартизация изображений и т. Д. И смогли достичь точности 93,81%. Хотя этот показатель точности не является чем-то выдающимся (из-за несбалансированности данных), но он вдохновил и побудил нас пойти немного глубже :)

Передача обучения

Поскольку наш набор данных относительно невелик (12000 изображений), мы решили исследовать переносное обучение прямо сейчас. Трансферное обучение - это метод, в котором мы используем полностью обученную модель, обученную на огромном количестве данных, и переобучаем / настраиваем ее для нашего случая использования. Есть замечательный туториал по тензорному потоку для трансферного обучения. Я прошу читателей ознакомиться с ним, поскольку он действительно подробный, и наш подход и код вдохновлены им. Для краткости мы не будем вдаваться в подробности трансферного обучения в этом посте.

Архитектура

В этом эксперименте мы загружаем уже обученную модель Inception и используем ее как средство извлечения признаков. Мы в основном извлекаем выходные данные последнего сверточного слоя модели Inception для всех наших изображений и сохраняем их в автономном режиме. Эти выходные данные называются «узкими местами» и представляют собой не что иное, как особенности изображений. Поскольку модель Inception была обучена на огромном количестве данных, она способна извлекать из изображений важные функции, такие как кривые, края и т. Д.

Когда у нас есть эти функции, мы создаем небольшую сеть из 3 полностью связанных слоев - 2048 * 512, 512 * 512 и 512 * 2. Затем эта небольшая сеть обучается классифицировать изображения по двум нашим категориям.

Оптимизатор и скорость обучения

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

Провал Адама немного удивил нас.

Размер партии

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

Пакетная нормализация

БН по-прежнему не улучшил наши результаты, поэтому мы его закрыли. Однако нам любопытно, и мы будем исследовать это дальше.

Прекращение обучения

Как и раньше, мы использовали агрессивный отсев 0,5.

Нормализация местного отклика

Мы не использовали это в этой архитектуре, потому что сверточные слои не были повторно обучены.

Результаты

Хотя прирост точности в наших предыдущих экспериментах не был впечатляющим, на этот раз все было немного иначе. С указанными выше настройками мы смогли получить точность 95,2%, что примерно на 1,5% по сравнению с нашими предыдущими результатами. Это было круто :)

Передача обучения сработала!

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

[Код] Я поделился кодом здесь. Пожалуйста, проверьте ветку version3 для этой установки. Не стесняйтесь использовать и изменять его. Будем счастливы координировать свои действия с заинтересованными людьми.