Дизайн модели архитектуры для CNN - PullRequest
0 голосов
/ 05 февраля 2020

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

model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(1, activation='sigmoid')
])

Но я увеличиваю количество классов до 5, точность снижается примерно до 0,2. Как я могу проектировать архитектуру CNN для 300 классов?

1 Ответ

0 голосов
/ 05 февраля 2020

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

Количество нейронов вашей последней плотности будет определять количество классов, которые вы хотите предсказать, поэтому, если у вас есть 300 классов, это будет выглядеть так:

[...]
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(300, activation='softmax')
])

Более того, чем больше чем больше у вас будет классов, тем сложнее будет модели узнать особенности каждого из них. Так что вам нужно будет увеличить его ширину (больше фильтра), глубину (больше сверточных блоков) или его разрешение (больше входных данных).

Хорошее начало для разработки моделей CNN, это взглянуть на архитектуру VGG и его сверточные блоки.

Надеюсь, это поможет вам обрести интуицию.

...