Keras Transfer Learning на более чем 1000 классов - PullRequest
0 голосов
/ 12 января 2019

Как применить переносное обучение из таких моделей, как 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)

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Simple: В вашем примере кода просто измените эту строку:

predictions = Dense(200, activation='softmax')(x)

, где вы вводите вместо 200 любое количество классов, на которых вы хотите тренироваться, например, скажем у вас 3000 классов. Тогда это будет:

predictions = Dense(3000, activation='softmax')(x)
0 голосов
/ 12 января 2019

Это называется точной настройкой модели keras. Вы должны удалить последний слой обученной модели, а затем для каждого слоя вы должны обновить весовые коэффициенты false, используя:

layer.trainable=False 

После этого вы можете добавить свой пользовательский слой

Например: добавьте плотный слой с более чем 1000 классов, если хотите, и тренируйте его. Затем вы можете обновить веса финального слоя в процессе обучения

Для получения дополнительной помощи обратитесь к этому видео видео ура: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...