Ще представя PyTorch Wrapper в този урок, спестявайки ни време при разработването на конвейера за обучение на модели на PyTorch. Ще можем да направим това на блокове!

Най-модерните пътни карти за наука за данни, които някога сте виждали! Предлага се с хиляди безплатни ресурси за обучение и интеграция с ChatGPT! https://aigents.co/learn/roadmaps/intro

Добре дошли на всички обратно в моя друг урок. „Последният път“ ви показах как да обучавате прост модел на PyTorch, това беше въведение в PyTorch, където ви показах как да обучавате MNIST класификатор с конволюционни невронни мрежи.

Постигнахме висок процент на точност от 97–98%, което означава, че е много точен. Но това е проста задача, защото MNIST разполага с огромен и прост набор от данни.

Разгледах как да изтегля MNIST данни с персонализирани функции, да ги обработвам предварително и да ги конвертирам в партиди. Показах ви как да конструирате нашия модел на невронна мрежа със CNN и как да отпечатате неговото резюме.

Дефинирахме оптимизатора и функцията за загуба. Създадохме функции за обучение и тестване, за да обучим и валидираме нашия модел за пет епохи. Накрая ви показах как да запишете модела на диск и по-късно да го заредите, докато изпълнявате тестови изводи. В момента ще правим същите неща, но ще използваме различни обекти и функции (The Wrapper).

PyTorch Wrapper

Работех върху персонализирана обвивка на PyTorch, която е включена в моите помощни програми за машинно обучение версия 1.0.1. Тази версия поддържа реализации на TensorFlow и PyTorch. Можете да го инсталирате с „pip install mltu==1.0.1“.

Лесно е, когато говорим за TensorFlow. Той вече поддържа модулен конвейер за обучение, където трябва да добавим обратни извиквания и показатели и да изпълним функцията за прилягане, за да инициираме конвейера за обучение. За PyTorch трябваше да внедря такава функционалност.

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

Този модул ще ни помогне, докато прекарваме време в изграждането на конвейер за обучение в PyTorch, и ще имаме повече време за други неща, като предварителна обработка на данни или архитектура на модела.

В началото изтегляме и обработваме предварително набора от данни MNIST, както преди:

Сега трябва да импортираме потребителски Wrapper обекти, които ще използваме за обучение на модела. Импортирам DataProvider - той обработва зареждането на данни на партиди по многонишков/многопроцесорен начин. След това импортирам Model - основният обект, където се случва цялата магия. След това е Accuracy; вместо твърдо кодиране на изчислението на точността, то ще се обработва в Metrics. След това, накрая, ние импортираме EarlyStopping и ModelCheckpoint, тези два обекта ще проследят целия процес на обучение, ще спрат тренировката в най-добрата му точка и ще запазят най-добрите тежести на модела в нашия път, когато се подобри.

Сега трябва да създадем функция за препроцесор, която ще разшири моето единично измерение на изображението и ще нормализира данните между 0 и 1.

Страхотно, сега трябва да създадем доставчици на данни за обучение и валидиране. Това е толкова просто, колкото да ги дефинираме с нашите набори от данни, да прикрепим препроцесора към списъка data_preprocessors и да дефинираме нашите данни batch_size:

Отлично; сега дефинираме мрежата (същата, която използвах в предишния урок). Ние дефинираме Optimizer като Adam, със скорост на обучение от 0,001. И трябва да запомним да дефинираме нашата загуба и да използваме CrossEntropyLoss за задачата за класификация на MNIST.:

Ето моята архитектура на невронната мрежа, която лежи в моя model.py файл:

Помните ли, че импортирахме две обратни повиквания? Сега трябва да ги инициализираме:

Първо, ние дефинираме обратното извикване EarlyStopping, което ще отговаря за спирането на процеса на обучение, когато нашият модел спре да се подобрява за определен брой епохи. Тук наблюдаваме точността на валидиране, защото няма смисъл да проследяваме точността на обучението. И тъй като се опитваме да увеличим максимално тази точност, задаваме режима като "max".

Второ, инициализираме ModelCheckpoint. Името говори само за себе си; всеки път, когато постигнем по-добра точност на валидиране от преди, запазваме нашия модел на диск на определено място. Също така задаваме режима на "max".

Така дефинирахме повечето от нещата. Трябва да инициализираме обекта Model с нашата невронна мрежова архитектура, оптимизатор, загуба и показатели. Това работи подобно на това, което правим model.compile() в TensorFlow:

Когато нашият Модел е дефиниран, можем да започнем процеса на обучение. И така, какво остава? Трябва да започнем тренировъчния процес. Можем да направим това, като извикаме функцията model.fit и като дефинираме нашите доставчици на данни за обучение и валидиране, броя на епохите за обучение и като подадем обратни извиквания:

И сега трябва да изчакаме да завърши процеса на обучение:

Както можете да видите, моделът спря да се обучава на 13 епохи с точност на валидиране от 98,7%. Нямаше нужда да се тревожим дали се обучава твърде дълго или твърде кратко, а относно запазването на модела, всичко беше обработено вместо нас.

Не е ли страхотно? Пропуснах това, когато използвах PyTorch за разработване на плавни и подредени тръбопроводи за обучение на различни невронни мрежи, които сега споделям с вас!

Тествайте модела:

Сега, след като обучихме нашия модел PyTorch с помощта на обвивката MLTU, е време да го тестваме върху някои нови данни, за да оценим ефективността му. Можем да заредим запазения модел, като използваме следния код:

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

Вече можем да прехвърлим тези предварително обработени тестови данни през нашия обучен модел, за да правим прогнози:

Резултатът от мрежовата функция ще бъде тензор, съдържащ прогнозираните вероятности за клас за всяко входно изображение. Използваме изхода, за да получим предвидения етикет на класа за всяка output.argmax функция. Вече можем визуално да сравним тези предвидени етикети с етикетите на основната истина за тестовите данни, за да оценим точността на нашия модел:

Ако преминем през всички набори от тестови данни, ще видим същата точност от 98,7%, което е много близо до точността на валидиране, която постигнахме по време на обучението. Това показва, че нашият модел се представя добре и може да обобщава нови данни!

Заключение:

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

Този проект все още трябва да включва много неща, но това е първото ми издание на пакета MLTU, който поддържа PyTorch. Ще продължа да разширявам функционалностите му в бъдеще. Като цяло този вид тренировъчна линия може да се използва повторно в много други проекти, което ви препоръчвам да направите.

Така че, ако сте нетърпеливи да научите как се развива този проект, абонирайте се за моя YouTube канал, следвайте моето GitHub репозиторий и чакайте актуализации!

Пълният код за този урок можете да намерите в тази GitHub връзка.

Първоначално публикувано на https://pylessons.com/pytorch-wrapper