Существует ли архитектура для мультиклассовой классификации с большим количеством классов? - PullRequest
0 голосов
/ 28 апреля 2019

Я довольно плохо знаком с глубоким обучением, занимаюсь хобби-проектами. Прямо сейчас я делаю мультиклассовую классификацию изображений с 200 классами. Есть ли у меня учебник или реальная архитектура, на которую я могу взглянуть?

До сих пор я пробовал базовые сети Dense и CNN, но никогда не достигал лучшей точности, чем 5%.

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

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape,
                 data_format='channels_first'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (4, 4), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adam(),
              metrics=['accuracy'])

Я искал решения, но так и не смог найти ни одного проекта с таким большим количеством классов (кроме VGG-19 или других SOTA CNN, но я бы попробовал написать свой, так как это для целей обучения). У кого-нибудь были подобные проекты или есть какое-нибудь руководство или какой-либо совет по такой проблеме?

Заранее спасибо.

1 Ответ

0 голосов
/ 28 апреля 2019

200 классов буквально мало.

Попробуйте

from keras.applications.resnet50 import ResNet50

model = ResNet50(weights=None, classes=200)
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adam(),
              metrics=['accuracy'])

Эта модель (ResNet50) должна быть достаточно хороша для большинства задач.

Каждая модель в keras.applicationsобучены иметь 1000 классов, если ваша задача - получить реальный образ, вы можете использовать обученные веса на

from keras.applications.resnet50 import ResNet50
from keras.layers import Dense
from keras.models import Model

model = ResNet50(weights='imagenet')
x = model.get_layer('avg_pool').output
x = Dense(200, activation='softmax')(x)
model = Model(model.input, x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...