Найти верхние слои для тонко настроенной модели - PullRequest
0 голосов
/ 17 марта 2020

Я хочу использовать тонко настроенную модель, основанную на MobileNetV2 (предварительно обученную на Keras). Но мне нужно добавить верхние слои, чтобы классифицировать мои изображения на 2 класса. Хотелось бы узнать, как выбрать «архитектуру» слоев, которая мне нужна? В некоторых примерах люди используют SVM Classifer или серию плотного слоя с указанным c числом нейронов в качестве верхних слоев.

Следующий код (по умолчанию) работает:

        self.base_model = base_model
        x = self.base_model.output
        x = GlobalAveragePooling2D()(x)
        x = Dense(1024, activation='relu')(x)
        predictions = Dense(2, activation='softmax')(x)

Есть ли методология, чтобы найти лучшее решение?

1 Ответ

2 голосов
/ 17 марта 2020

Я рекомендую либо Dropout, либо BatchNormalization. Плотный может быть легко переопределен, потому что он имеет слишком много параметров в слое. Оба слоя могут хорошо упорядочить модель. GlobalAveragePooling2D является хорошим выбором, поскольку он также действует как сам регуляризатор.

Я также предлагаю, чтобы в случае проблемы двоичной классификации вы могли изменить выходной слой на Dense(1, activation='sigmoid'), чтобы предсказать только P ( класс1), где вы можете рассчитать P (класс2) по 1-P (класс1). Потеря, которую вы должны использовать в этом случае, будет binary_crossentropy вместо categorical_crossentropy.

...