Как точно настроить модель keras с существующими плюс новыми классами? - PullRequest
0 голосов
/ 20 сентября 2019

Добрый день!

У меня есть набор данных знаменитостей, на котором я хочу настроить встроенную модель keras.Так далеко от того, что я исследовал и сделал, мы удаляем верхние слои исходной модели (или, предпочтительно, передаем include_top = False) и добавляем наши собственные слои, а затем обучаем наши новые добавленные слои, сохраняя предыдущие слои замороженными.Все это очень похоже на интуитивное.

Теперь мне нужно, чтобы моя модель научилась распознавать лица знаменитостей, а также была способна обнаруживать все другие объекты, на которых она обучалась ранее.Первоначально модели, обученные на imagenet, имеют выходной слой из 1000 нейронов, каждый из которых представляет отдельный класс.Я запутался в том, как он должен уметь обнаруживать новые классы?Во всех статьях и блогах по обучению переносу и тонкой настройке говорится, что мы должны заменить исходный выходной слой из 1000 нейронов другим слоем из N-нейронов (N = количество новых классов).В моем случае у меня есть две знаменитости, поэтому, если у меня есть новый слой с 2 ​​нейронами, я не знаю, как модель будет классифицировать исходные 1000 изображений imagenet.

Мне нужен указатель на этоВ общем, как я могу подготовить предварительно обученную модель к двум новым знаменитостям, сохранив при этом способность распознавать все 1000 объектов imagenet.

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

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

Подходя к сути,Один очевидный способ дать возможность модели классифицировать новый класс наряду со старым классом - это обучение с нуля накопленному (старому + новому) набору данных, который отнимает много времени.С другой стороны, используя подход переносного обучения, вы замораживаете вес модели магистрали для извлечения объектов и узнаете вес выходного слоя (из нового набора данных) с вашим целевым номером нового класса / узла.Итак, мы потеряли ранее усвоенные знания.Наконец, один из способов решения вашей проблемы (то есть, чтобы модель работала как для старых, так и для новых классов) состоит в объединении старого и нового выходного слоя с сохранением фиксированной магистрали, как показано на рисунке: enter image description here

Точнее, вы можете построить новую модель с замороженной магистралью и старым + новым номером класса в выходном слое с последующей загрузкой веса выходного слоя из двух предыдущих моделей (предварительно обученных и вновь обученных) в специализированной модели.способ.

1 голос
/ 20 сентября 2019

С помощью трансферного обучения вы можете сделать обученную модель классифицированной среди новых классов, которые вы только что обучили, используя функции, изученные из нового набора данных, и функции, изученные моделью из набора данных, на котором она была обучена.,К сожалению, вы не можете сделать модель для классификации между всеми классами (исходные классы набора данных + вторично используемые классы набора данных), потому что, когда вы добавляете новые классы, она сохраняет их веса только для классификации.Но, скажем, для экспериментов вы меняете количество выходных нейронов (равное количеству старых + новых классов) в последнем слое, тогда он теперь даст случайные веса этим нейронам, которые по прогнозу не дадут вам значимого результата.

Вся эта задача создания модели для классификации среди старых + новых классов экспериментов все еще находится в области исследований.Тем не менее, одним из способов достижения этого является обучение вашей модели с нуля по всем данным (старым + новым).

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