У центрі простоти та ефективності 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
Крок 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