Как применить переносное обучение из таких моделей, как InceptionV3, ResNet50, которые обучаются в ImageNet (около 1000 классов), к проблеме с более чем 1000 классов?
Я использую Keras, но я открыт для других решений. Мне знакома идея загрузки всех весов обученной сети (например, ResNet50 в ImageNet), за исключением верхнего (конечный уровень классификации с 1000 единицами) и последующего подключения конца сети к другим уровням, которые я могу указать ( полностью связанные слои, объединение и т. д.). Однако во многих из этих сетей уровни, предшествующие последним уровням, имеют менее 3000 единиц, поэтому добавление слоя, превышающего 3000 единиц, будет расширением, чем-то вроде декодера в автоэнкодере. Обычно я видел, как конечные слои уменьшались в размере. Как лучше всего подойти к этому?
Пример в приложениях Keras:
from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)
# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)