Загрузка современной модели и оценка в TF 2.0.
«Стоя на плечах гигантов»
Трансферное обучение определяется ниже:
Переносное обучение и адаптация предметной области относятся к ситуации, когда то, что было изучено в одной обстановке… используется для улучшения обобщения в другой обстановке — стр. 526, Глубокое обучение, 2016 г.
Таким образом, говоря простыми словами, это процесс использования современных моделей в соответствующей области для решения нашей проблемы. Давайте пройдем весь процесс использования этого подхода. И пропустить теорию за книгами и курсом 😉
Шаг 1: Определение проблемы
Прежде всего, мы должны знать, с какой проблемой мы имеем дело. Для этого блога я возьму задачу классификации изображений, где нам нужно классифицировать изображение ячейки, независимо от того, относится ли оно к классу Незараженный или Паразитированный (зараженный). Этот набор данных является частью набора данных о малярии. Образцы помеченных изображений приведены ниже:
Таким образом, наша цель состоит в том, чтобы создать модель для классификации двух классов. Таким образом, наша проблема заключается в классификации изображений.
Шаг 2: Выбор наиболее подходящей модели.
Можно подумать о построении модели CNN с нуля, что может быть осуществимо или необходимо в некоторых случаях. Но здесь мы будем использовать предварительно обученную модель. Мы выбираем ResNet50 в качестве нашей базы, так как кажется, что она работает лучше по сравнению с InceptionNet. Использовать то же самое:
# adding the Resnet50v2 model Resnet = tf.keras.applications.ResNet50V2(include_top=False, weights='imagenet', input_shape=(100,100,3))
Приведенная выше строка загружает ResNet50V2 , без top означает, что слой классификации отсутствует в модели, weights = 'imagenet' означает, что модель имеет веса, которые были получены при ее обучении на наборе данных imagenet, input_shape должен быть равен форма входных изображений, которую мы хотим предоставить, в нашем случае 100 x 100 x 3 (ширина x высота x канал).
Вся модель, которую мы создаем, приведена в коде ниже:
# adding the Resnet50v2 model Resnet = tf.keras.applications.ResNet50V2(include_top=False, weights='imagenet', input_shape=(100,100,3)) Resnet.trainable = False #print(Resnet.summary()) myResnet = tf.keras.models.Sequential(name='MyResnet') myResnet.add(Resnet) myResnet.add(tf.keras.layers.Flatten()) myResnet.add(tf.keras.layers.Dropout(0.5)) myResnet.add(tf.keras.layers.Dense(256, activation='relu')) myResnet.add(tf.keras.layers.Dropout(0.5)) myResnet.add(tf.keras.layers.Dense(64, activation='relu')) myResnet.add(tf.keras.layers.Dense(2, activation='softmax')) print(myResnet.summary())
Здесь мы добавляем нижний слой, чтобы удовлетворить нашу задачу, таким образом, слой softmax в конце с двумя нейронами помогает классифицировать два класса, поскольку классов всего два и они взаимоисключающие, поэтому также можно использовать один нейрон с сигмовидной активацией. На обучение уходит сравнительно меньше времени. Но мы пойдем с 2 нейронами softmax.😎
Шаг 3: Обучите модель.
Даже через модель resnet обучается, но новые добавленные головные слои (да, выходная часть является головной частью сети, а входная — хвостовой по соглашению 🤷♂️) не обучаются, поэтому нам нужно тренироваться, чтобы соответствовать нашему набору данных. После обучения график может быть показан как: -
Да, еще есть место для других эпох, но пока мы остановимся здесь, так как у нас другие планы. См. Часть 2: Тонкая настройка.
Шаг 4: Оценка
Результаты оценки ниже:
The accuracy of the MyResnet Custom model is: 0.9361393323657474 The Mean Squared Error of the MyResnet Custom model is: 0.06386066763425254 The Mean Squared Log Error of the MyResnet Custom model is: 0.03068205023570517
Теперь мы попытаемся увеличить его еще больше с помощью тонкой настройки модели под наши нужды. Оставайтесь с нами для части 2.