Розуміння об’єкта Learner в FastAI

pic

У центрі простоти та ефективності FastAI знаходиться об'єкт Learner. Цей фундаментальний компонент інкапсулює весь процес навчання, дозволяючи користувачам навчати, перевіряти та налаштовувати моделі з неймовірною легкістю. Незалежно від того, чи ви початківець, чи досвідчений розробник, розуміння об'єкта Learner є ключем до використання всього потенціалу FastAI. Цей блог занурюється в деталі об'єкта Learner, його функції та способи ефективного використання.

1. Що таке об'єкт Learner?

Об'єкт Learner у FastAI виступає як центральний інтерфейс для навчання моделей машинного навчання. Він обгортає модель PyTorch, виконуючи такі завдання:

  • Завантаження та пакетування даних
  • Застосування трансформацій
  • Обробка циклу навчання
  • Моніторинг метрик
  • Збереження та завантаження моделей
  • Налаштування та розширення поведінки навчання

Абстрагуючи ці процеси, об'єкт Learner зменшує кількість шаблонного коду і дозволяє користувачам зосередитися на побудові та покращенні своїх моделей.

Анатомія об'єкта Learner

Щоб повністю зрозуміти потужність об'єкта Learner, давайте розглянемо його ключові компоненти:

1. DataLoaders (dls):
Об'єкт DataLoaders подає дані моделі під час навчання та перевірки. Він виконує такі завдання, як пакетування, перемішування та застосування технік розширення даних.

2. Модель:
Архітектура моделі PyTorch, така як ResNet, EfficientNet або U-Net, служить основою для навчального завдання. FastAI надає утиліти для легкої інтеграції попередньо натренованих моделей.

3. Функція втрат:
Функція втрат обчислює різницю між прогнозованими та справжніми значеннями, направляючи процес оптимізації для мінімізації помилки. Прикладом є CrossEntropyLoss для класифікації та MSELoss для задач регресії.

4. Оптимізатор:
Оптимізатор оновлює ваги моделі під час навчання для мінімізації втрат. Популярні варіанти включають Adam, SGD та RMSprop, які можна налаштувати в об'єкті Learner.

5. Метрики:
Метрики надають зворотний зв'язок про продуктивність моделі під час навчання. Вони допомагають відстежувати прогрес і забезпечують ефективне навчання моделі. Прикладом є accuracy, precision і F1-score.

6. Колбеки:
Колбеки — це крючки, які дозволяють користувачам налаштовувати та розширювати процес навчання. Прикладом є планування навчальної швидкості, тренування з змішаною точністю та раннє зупинення.

2. Створення об'єкта Learner

pic

Крок 1: Підготовка даних

Перший крок у створенні об'єкта Learner — підготовка даних. FastAI спрощує цей процес за допомогою API DataBlock та класу DataLoaders. Наприклад, щоб завантажити набір даних Oxford-IIIT Pet:

from fastai.vision.all import   
path = untar_data(URLs.PETS)/'images'  
dls = ImageDataLoaders.from_name_re(  
 path, get_image_files(path), pat=r'(.+)_\d+', item_tfms=Resize(224))  

Тут:
- untar_data завантажує та розпаковує набір даних.
- ImageDataLoaders.from_name_re створює об'єкт DataLoaders, автоматично розділяючи дані на навчальні та валідаційні набори.
- item_tfms=Resize(224) забезпечує зміну розміру всіх зображень до 224x224 пікселів.

Крок 2: Визначення Learner

Після підготовки даних ви можете визначити об'єкт Learner:

learn = cnn_learner(dls, resnet34, metrics=error_rate)  

Цей рядок коду:
- Визначає набір даних (dls).
- Обирає архітектуру ResNet-34 як основу моделі.
- Визначає метрику error_rate для оцінки продуктивності.

Крок 3: Навчання моделі

Навчання моделі настільки просте, як виклик:

learn.fine_tune(5)  

Цей метод налаштовує попередньо натреновану модель ResNet-34 на 5 епохах, оптимізуючи її для конкретного набору даних.

3. Розширені функції об'єкта Learner

**1.

Learning Rate Finder

Вибір правильного значення навчальної швидкості є критично важливим для ефективного навчання. Метод lr_find в FastAI допомагає визначити оптимальну навчальну швидкість:

learn.lr_find()  

Ця команда будує графік, що показує, як змінюються втрати при різних навчальних швидкостях. Використовуйте графік, щоб вибрати таку швидкість, при якій втрати різко зменшуються.

Custom Loss Functions

Ви можете визначити та використовувати власні функції втрат для налаштування об'єкта Learner під конкретні завдання:

from torch.nn.functional import binary_cross_entropy_with_logits  
learn = cnn_learner(dls, resnet34, loss_func=binary_cross_entropy_with_logits, metrics=accuracy)  

Callbacks

Колбеки розширюють функціональність об'єкта Learner. Загальні випадки використання включають:

  • Раннє зупинення: зупинити навчання, коли валідаційні втрати перестають зменшуватись.
  • Тренування з міксованою точністю: зменшити використання пам'яті та прискорити навчання:
 from fastai.callback.fp16 import   
 learn = cnn_learner(dls, resnet34, metrics=accuracy, cbs=MixedPrecision())  
 learn.fine_tune(5)  
  • Акумуляція градієнтів: симулювати більші розміри партій для середовищ з обмеженою пам'яттю:
 from fastai.callback.gradient_accum import GradientAccumulation  
 learn = cnn_learner(dls, resnet34, metrics=accuracy, cbs=GradientAccumulation(n_acc=64))  

Exporting Models

Збережіть і експортуйте вашу натреновану модель для розгортання:

learn.export(‘model.pkl’)  

Завантажте модель для прогнозування:

learn_inf = load_learner(‘model.pkl’)  
prediction = learn_inf.predict(‘path/to/image.jpg’)  

Interpreting Results

FastAI надає потужні інструменти для інтерпретації та візуалізації продуктивності моделі:

Confusion Matrix

Матриця плутанини допомагає виявити, де модель неправильно класифікує дані:

interp = ClassificationInterpretation.from_learner(learn)  
interp.plot_confusion_matrix()  

Top Losses

Візуалізуйте зразки, які спричинили найбільші помилки:

interp.plot_top_losses(5, nrows=1)  

4. Use Cases of the Learner Object

1. Image Classification

Об'єкт Learner широко використовується для задач класифікації зображень, таких як ідентифікація об'єктів в медичних зображеннях або автономне водіння.

2. Natural Language Processing

Для таких задач, як аналіз настроїв та мовне моделювання, використовуйте TextLearner:

from fastai.text.all import   
dls = TextDataLoaders.from_folder(path)  
learn = text_classifier_learner(dls, AWD_LSTM, drop_mult=0.5, metrics=accuracy)  
learn.fine_tune(4)  

3. Tabular Data Analysis

TabularLearner ідеально підходить для прогнозування з використанням структурованих даних:

from fastai.tabular.all import   
dls = TabularDataLoaders.from_csv(‘data.csv’, y_names=’target’)  
learn = tabular_learner(dls, metrics=accuracy)  
learn.fit_one_cycle(5)  

5. Висновок

Об'єкт Learner є основою екосистеми навчання FastAI, поєднуючи простоту і гнучкість. Він абстрагує складності навчання моделі, одночасно надаючи потужні можливості для налаштування для досвідчених користувачів. Опанувавши об'єкт Learner, ви розкриваєте весь потенціал FastAI, що дозволяє будувати і оптимізувати моделі для широкого спектру застосувань. Незалежно від того, чи ви працюєте над класифікацією зображень, обробкою тексту або аналізом табличних даних, об'єкт Learner надає всі інструменти, необхідні для успіху.

Перекладено з: Understanding FastAI’s Learner Object

Leave a Reply

Your email address will not be published. Required fields are marked *