За повечето задачи за задълбочено обучение можете да използвате предварително обучена мрежа и да я адаптирате към вашите собствени данни. За пример, показващ как да се използва трансферно обучение за преквалификация на конволюционна невронна мрежа за класифициране на нов набор от изображения, вижте Обучение на мрежа за дълбоко обучение за класифициране на нови изображения. Като алтернатива можете да създавате и обучавате мрежи от нулата, като използвате обекти layerGraph с функциите trainNetwork и trainingOptions.
Ако функцията trainingOptions не предоставя опциите за обучение, които са ви необходими за вашата задача, тогава можете да създадете персонализиран цикъл на обучение, като използвате автоматична диференциация. За да научите повече, вижте Определяне на мрежа за дълбоко обучение за персонализирани цикли на обучение.
Ако Deep Learning Toolbox ™ не предоставя слоевете, необходими за вашата задача (включително изходни слоеве, които определят функциите за загуба), тогава можете да създадете персонализиран слой. За да научите повече, вижте Дефиниране на персонализирани слоеве за дълбоко обучение. За функции за загуби, които не могат да бъдат посочени с помощта на изходен слой, можете да посочите загубата в персонализиран цикъл на обучение. За да научите повече, вижте Задаване на функции за загуба. За мрежи, които не могат да бъдат създадени с помощта на графики на слоеве, можете да дефинирате персонализирани мрежи като функция. За да научите повече, вижте Определяне на мрежата като функция на модела.
За повече информация за това кой метод на обучение да използвате за коя задача, вижте Модели за дълбоко обучение на обучение в MATLAB.
Определете мрежа за дълбоко обучение за персонализирани цикли на обучение
Определете мрежата като dlnetwork обект
За повечето задачи можете да контролирате подробностите за алгоритъма на обучение, като използвате функциите trainingOptions и trainNetwork. Ако функцията trainingOptions не предоставя опциите, необходими за вашата задача (например персонализиран график за скорост на обучение), тогава можете да дефинирате свой собствен цикъл на обучение с помощта на обект dlnetwork. Обектът dlnetwork ви позволява да обучавате мрежа, посочена като графика на слоя, използвайки автоматично диференциране.
За мрежи, посочени като графика на слоя, можете да създадете обект dlnetwork от графика на слоя, като използвате директно функцията dlnetwork. За списък на слоевете, поддържани от dlnetwork обекти, вижте раздела Поддържани слоеве на страницата dlnetwork.
За пример, показващ как да обучавате мрежа с персонализиран график за скорост на обучение, вижте Обучение на мрежа с използване на персонализирана цикъл на обучение.
Определете мрежата като функция на модела
За архитектури, които не могат да бъдат създадени с помощта на графики на слоеве (например сиамска мрежа, която изисква споделени тегла), можете да дефинирате модела като функция на формата [dlY1. dlYM] = модел (параметри, dlX1. dlXN), където параметрите съдържат мрежовите параметри, dlX1. dlXN съответстват на входните данни за входовете на N модела и dlY1. dlYM съответстват на изходите на М модела. За да обучите модел за задълбочено обучение, дефиниран като функция, използвайте персонализиран цикъл на обучение. За пример вижте Обучение на мрежа, използваща функция на модел.
Когато дефинирате модели на дълбоко обучение като функция, трябва ръчно да инициализирате тежестите на слоевете. За повече информация вижте Инициализиране на обучими параметри за функции на модела.
Ако дефинирате персонализирана мрежа като функция, тогава функцията на модела трябва да поддържа автоматично диференциране. Можете да използвате следните операции за дълбоко обучение. Изброените тук функции са само подмножество. За пълен списък с функции, които поддържат въвеждане на dlarray, вижте Списък на функциите с поддръжка на dlarray.
Операцията с едно горещо декодиране декодира вектори на вероятността, като изхода на мрежа за класификация, в етикети за класификация.
Входът A може да бъде dlarray. Ако A е форматирано, функцията игнорира формата на данните.
Посочете функции за загуба
Когато използвате персонализирани цикли за обучение, трябва да изчислите загубата във функцията за градиенти на модела. Използвайте стойността на загубата при изчисляване на градиенти за актуализиране на мрежовите тегла. За да изчислите загубата, можете да използвате следните функции:
softmax | Операцията за активиране на softmax прилага функцията softmax към измерението на канала на входните данни. |
сигмоидна | Операцията за активиране на сигмоида прилага сигмоидната функция към входните данни. |
кроссентропия | Операцията за кръстосана ентропия изчислява загубата на кръстосана ентропия между мрежови прогнози и целеви стойности за задачи за класификация с един етикет и много етикети. |
mse | Операцията за грешка на половината от средния квадрат изчислява половината от средната стойност на загубата на грешка между прогнозите на мрежата и целевите стойности за задачи за регресия. |
Като алтернатива можете да използвате персонализирана функция за загуба, като създадете функция на формата загуба = myLoss (Y, T), където Y е мрежовите прогнози, T са целите и загубата е върнатата загуба.
За пример, показващ как да се обучи генеративна състезателна мрежа (GAN), която генерира изображения с помощта на персонализирана функция за загуба, вижте Обучение на генеративна състезателна мрежа (GAN).
Актуализирайте обучими параметри, като използвате автоматична диференциация
Когато обучавате модел за задълбочено обучение с персонализиран цикъл на обучение, софтуерът минимизира загубата по отношение на обучимите параметри. За да сведе до минимум загубата, софтуерът използва градиентите на загубата по отношение на обучимите параметри. За да изчислите тези градиенти с помощта на автоматична диференциация, трябва да дефинирате функция за градиенти на модел.
Определете функцията на градиенти на модела
За модели, посочени като обект dlnetwork, създайте функция на градиентите на формата = modelGradients (dlnet, dlX, T), където dlnet е мрежата, dlX съдържа входните предиктори, T съдържа целите и градиентите съдържа върнатите градиенти. По желание можете да предадете допълнителни аргументи на функцията градиенти (например, ако функцията за загуба изисква допълнителна информация) или да върнете допълнителни аргументи (например метрики за начертаване на хода на обучението).
За модели, посочени като функция, създайте функция на градиентите на формата = modelGradients (параметри, dlX, T), където параметрите съдържат обучимите параметри, dlX съдържа входните предиктори, T съдържа целите, а градиентите съдържат върнатите градиенти. По желание можете да предадете допълнителни аргументи на функцията градиенти (например, ако функцията за загуба изисква допълнителна информация) или да върнете допълнителни аргументи (например метрики за начертаване на хода на обучението).
За да научите повече за дефинирането на функции за градиенти на модели за персонализирани цикли на обучение, вижте Дефиниране на функцията за градиенти на модели за персонализиран цикъл на обучение.
Актуализиране на обучими параметри
За да оцените градиентите на модела, използвайки автоматично диференциране, използвайте функцията dlfeval, която оценява функция с активирана автоматична диференциация. За първия вход на dlfeval, предайте функцията за градиенти на модела, посочена като манипулатор на функция, а за следващите входове, предайте необходимите променливи за функцията за градиенти на модела. За изходите на функцията dlfeval посочете същите изходи като функцията за градиенти на модела.
За да актуализирате научимите параметри, използвайки градиенти, можете да използвате следните функции:
- Определете персонализиран претеглен класификационен слой - MATLAB; Simulink
- Програма за обучение за отслабване с чист старт - IAPAM
- Загуба на класификация за линейни класификационни модели - MATLAB
- Обучението за интервали за кардио за загуба на мазнини надвишава ниската интензивност!
- Кръстосано обучение - ключът към бързото отслабване