/ / фина настройка на CNN от нисък слой fc - компютърно виждане, невронна мрежа, конволюция, дълбоко учене, кафе

фина настройка на CNN от по-нисък слой fc - компютърно виждане, невронна мрежа, конволюция, дълбоко учене, кафе

Забелязах, че повечето фина настройка на CNN върху новия набор от данни се извършва само на "последния" напълно свързан (fc) слой.

Интересувам се от фина настройка от "първата"напълно свързан слой, т.е. искам да използвам функции от средата на ниво от конволюция и обединяване на слоевете така, както са, предполагайки, че са обучени на ImageNet, но след това да се поберат всички fc слоеве в новия ми набор от данни.

Теоретично и на практика, какъв е предполагаемият ефект от това? Възможно ли е да науча по-подходящ набор от параметри за новия ми набор от данни?

Отговори:

3 за отговор № 1

Теоретично, колкото по-дълбоко прецизирате, толкова по-добре вашият модел отговаря на вашите данни. Така че, ако успеете да настроите целия модел - толкова по-добре.

И така, какъв е уловът, трябва да питате, защо не нагласяте целия модел?
Първо, фина настройка на целия модел включва многои много параметри, за да тренирате правилно милиони параметри без риск от свръхнатоварване, трябва да имате много примери за обучение. В повечето случаи при фина настройка имате само много малко анотирани образци за новата задача и затова не можете да си позволите фина настройка на целия модел.
На второ място, фина настройка на целия модел отнема много по-дълго време от тренирането само на горния слой fc. По този начин, ако имате малко време и бюджет, вие само фино настройвате горния слой fc.

Във вашия случай, ако имате достатъчно мостри, можетефина настройка на горните два слоя fc. От моя опит е по-добре първо да нагласите най-горния слой и след това фина настройка на горните две заедно, след като някои повторения са направени само на горния слой.


0 за отговор № 2

Целта на слоевете FC в ConvNet е само занаправете класификация за проблема си. Можете просто да използвате крайния сплескан изход от последния слой Conv / Pooling като конструирани функции и да го поставите в друг модел за машинно обучение и той ще има същия ефект.

Това предполага, че параметрите, извлечени от слоевете на FC, в повечето случаи са много специфични за проблема (в зависимост от данните) и в повечето случаи не могат да се прехвърлят.

Така че, когато хората се приспособят към предварително обучен модел, те почти винаги изпускат слоевете FC на върха.

Сега можете да отидете на 2 начина оттук.

  1. Използвайте крайния плосък изход от последнияConv / Pooling слой като извлечени функции за вашия проблем и влак ML модел върху него. Този метод обикновено се използва, ако вашият набор от данни е малък или не е сходен с предварително обучения модел.
  2. Получете извлечените функции, като използвате горния методи след това ги използва за обучение на невронна мрежа на FC. След като сте постигнали достоен точност, стека го на върха на последния слой conv / pooling на предварително обучения модел (не забравяйте да премахнете оригиналните FC слоеве). Сега замразяване (параметрите се правят постоянни и не се променят при тренировка) по-голямата част от предварително обучения модел и позволяват само на последните няколко конво слоеве да бъдат обучени. Сега обучавайте цялата мрежа да тренирате с много малка скорост на обучение.

Цялата точка на замразяване по-голямата част от модела ече предполагаме, че моделът вече познава основни неща като детекция на ръба и цвят от предишните слоеве на конв. Сега внимателно настройваме последните няколко слоя за нашия проблем. Избрахме малка скорост на обучение, за да не се справим с това, което моделът вече е научил.

Причината, поради която тренираме FC слоевете, преди да се поберемте на предварително обучения модел е само за да спасим времето за обучение и по-важно, за да гарантираме, че няма да направим много промени в слоевете Conv и ще свършим с монтажа.