PyTorch це популярна платформа машинного навчання з відкритим кодом, яка базується на Python і оптимізована для обчислень із прискоренням GPU. Спочатку розроблений Meta AI у 2016 році, а тепер є частиною Linux Foundation, PyTorch швидко став одним із найпоширеніших фреймворків для досліджень і програм глибокого навчання.
На відміну від деяких інших фреймворків, таких як TensorFlow, PyTorch використовує динамічні обчислювальні графіки, які забезпечують більшу гнучкість і можливості налагодження. Ключові переваги PyTorch:
- Простий та інтуїтивно зрозумілий API Python для створення нейронних мереж
- Широка підтримка прискорення GPU/TPU
- Вбудована підтримка автоматичної диференціації
- Розподілені навчальні можливості
- Взаємодія з іншими бібліотеками Python, такими як NumPy
Блискавка PyTorch — це легка оболонка, створена на основі PyTorch, яка ще більше спрощує процес роботи дослідника та розробки моделі. Завдяки Lightning дослідники даних можуть більше зосередитися на розробці моделей, а не на шаблонному коді. Основні переваги Lightning:
- Надає структуру для організації коду PyTorch
- Обробляє шаблонний код циклу навчання
- Прискорює дослідницькі експерименти з налаштуванням гіперпараметрів
- Спрощує масштабування та розгортання моделі
Поєднуючи потужність і гнучкість PyTorch з високорівневими API Lightning, розробники можуть швидко створювати масштабовані системи глибокого навчання та виконувати ітерації швидше.
Щоб почати використовувати PyTorch і Lightning, вам спочатку потрібно встановити кілька попередніх умов:
- Python 3.6 або вище
- Інсталятор пакетів Pip
- Графічний процесор NVidia рекомендується для прискорених операцій (можливе налаштування лише для ЦП, але повільніше)
Встановлення Python і PyTorch
Рекомендується використовувати Anaconda для налаштування середовища Python для обробки даних і глибокого навчання. Виконайте наведені нижче дії.
- Завантажте та встановіть Anaconda для вашої ОС з тут
- Створіть середовище Conda (або використовуючи інший менеджер середовища Python):
conda create -n pytorch python=3.8
- Активізуйте середовище:
conda activate pytorch
- Встановіть PyTorch:
conda install pytorch torchvision torchaudio -c pytorch
Переконайтеся, що PyTorch встановлено правильно, виконавши швидкий тест у Python:
import torch
x = torch.rand(3, 3)
print(x)
Це роздрукує випадковий тензор 3×3, підтверджуючи, що PyTorch працює належним чином.
Встановлення PyTorch Lightning
Після встановлення PyTorch тепер ми можемо встановити Lightning за допомогою pip:
pip install lightning-ai
Давайте підтвердимо, що Lightning налаштовано правильно:
import lightning_ai
print(lightning_ai.__version__)
Це повинно роздрукувати номер версії, наприклад 0.6.0
.
Тепер ми готові розпочати створення моделей глибокого навчання.
PyTorch використовує тензори, подібні до масивів NumPy, як свою основну структуру даних. Тензори можуть працювати з графічним процесором і підтримувати автоматичне диференціювання для побудови нейронних мереж.
Давайте визначимо просту нейронну мережу для класифікації зображень:
import torch
import torch.nn as nn
import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net()
Це визначає згортову нейронну мережу з двома згортковими шарами та трьома повністю зв’язаними шарами для класифікації 10 класів. The forward()
Метод визначає, як дані проходять через мережу.
Тепер ми можемо навчити цю модель на зразках даних за допомогою Lightning.
Блискавка забезпечує a LightningModule
клас для інкапсуляції коду моделі PyTorch і шаблону навчального циклу. Перетворимо нашу модель:
import pytorch_lightning as pl class LitModel(pl.LightningModule): def __init__(self): super().__init__() self.model = Net() def forward(self, x): return self.model(x) def training_step(self, batch, batch_idx): x, y = batch y_hat = self.forward(x) loss = F.cross_entropy(y_hat, y) return loss def configure_optimizers(self): return torch.optim.Adam(self.parameters(), lr=0.02) model = LitModel()
Команда training_step()
визначає форвардний перехід і розрахунок втрат. Ми налаштовуємо оптимізатор Adam зі швидкістю навчання 0.02.
Тепер ми можемо легко навчити цю модель:
trainer = pl.Trainer()
trainer.fit(model, train_dataloader, val_dataloader)
Тренер обробляє цикли епохи, перевірку та журналювання автоматично. Ми можемо оцінити модель на тестових даних:
result = trainer.test(model, test_dataloader)
print(result)
Для порівняння, ось код мережі та навчального циклу в чистому PyTorch:
import torch
import torch.nn.functional as F
from torch.utils.data import DataLoader # Assume Net class and train_dataloader, val_dataloader, test_dataloader are defined class Net(torch.nn.Module): # Define your network architecture here pass # Initialize model and optimizer
model = Net()
optimizer = torch.optim.Adam(model.parameters(), lr=0.02) # Training Loop
for epoch in range(10): # Number of epochs for batch_idx, (x, y) in enumerate(train_dataloader): optimizer.zero_grad() y_hat = model(x) loss = F.cross_entropy(y_hat, y) loss.backward() optimizer.step() # Validation Loop
model.eval()
with torch.no_grad(): for x, y in val_dataloader: y_hat = model(x) # Testing Loop and Evaluate
model.eval()
test_loss = 0
with torch.no_grad(): for x, y in test_dataloader: y_hat = model(x) test_loss += F.cross_entropy(y_hat, y, reduction='sum').item()
test_loss /= len(test_dataloader.dataset)
print(f"Test loss: {test_loss}")
Lightning робить розробку моделі PyTorch неймовірно швидкою та інтуїтивно зрозумілою.
Lightning надає багато вбудованих можливостей для налаштування гіперпараметрів, запобігання переобладнанню та керування моделлю.
Налаштування гіперпараметрів
Ми можемо оптимізувати такі гіперпараметри, як швидкість навчання, за допомогою Lightning tuner
модуль:
tuner = pl.Tuner(trainer)
tuner.fit(model, train_dataloader)
print(tuner.results)
Це виконує байєсівський пошук у просторі гіперпараметрів.
Поводження з переобладнанням
Стратегії, такі як випадання шарів і рання зупинка, можуть зменшити переобладнання:
model = LitModel()
model.add_module('dropout', nn.Dropout(0.2)) # Regularization trainer = pl.Trainer(early_stop_callback=True) # Early stopping
Збереження та завантаження моделі
Lightning спрощує збереження та перезавантаження моделей:
# Save
trainer.save_checkpoint("model.ckpt") # Load
model = LitModel.load_from_checkpoint(checkpoint_path="model.ckpt")
Це зберігає повний стан моделі та гіперпараметри.
І PyTorch, і PyTorch Lightning є потужними бібліотеками для глибокого навчання, але вони служать різним цілям і пропонують унікальні функції. У той час як PyTorch забезпечує базові блоки для розробки та впровадження моделей глибокого навчання, PyTorch Lightning має на меті спростити повторювані частини навчання моделі, тим самим прискорюючи процес розробки.
Ключові відмінності
Ось короткий виклад ключових відмінностей між PyTorch і PyTorch Lightning:
особливість | PyTorch | Блискавка PyTorch |
---|---|---|
Навчальна петля | Кодується вручну | Автоматизований |
Шаблонний код | Вимагається | Minimal |
Налаштування гіперпараметрів | Налаштування вручну | Вбудована підтримка |
Розподілене навчання | Доступно, але ручне налаштування | Автоматизований |
Організація коду | Немає конкретної структури | Заохочує модульний дизайн |
Збереження та завантаження моделі | Необхідна індивідуальна реалізація | Спрощено з контрольними точками |
Налагодження | Просунутий, але ручний | Простіше з вбудованими колодами |
Підтримка GPU/TPU | наявний | Простіше налаштування |
Гнучкість проти зручності
PyTorch відомий своєю гнучкістю, особливо з динамічними обчислювальними графіками, що чудово підходить для досліджень і експериментів. Однак ця гнучкість часто обходиться ціною написання більшої кількості шаблонного коду, особливо для циклу навчання, розподіленого навчання та налаштування гіперпараметрів. З іншого боку, PyTorch Lightning абстрагує більшу частину цього шаблону, але все ще дозволяє повне налаштування та доступ до API нижнього рівня PyTorch, коли це необхідно.
Швидкість розвитку
Якщо ви починаєте проект з нуля або проводите складні експерименти, PyTorch Lightning може заощадити вам багато часу. Клас LightningModule оптимізує процес навчання, автоматизує ведення журналів і навіть спрощує розподілене навчання. Це дає змогу більше зосередитися на архітектурі моделі, а не на повторюваних аспектах навчання та перевірки моделі.
Вердикт
Таким чином, PyTorch пропонує більш детальний контроль і чудово підходить для дослідників, яким потрібен такий рівень деталізації. Однак PyTorch Lightning розроблено для того, щоб зробити цикл від дослідження до виробництва плавнішим і швидшим, не позбавляючи потужності та гнучкості, які надає PyTorch. Вибір PyTorch або PyTorch Lightning залежить від ваших конкретних потреб, але хороша новина полягає в тому, що ви можете легко перемикатися між ними або навіть використовувати їх у тандемі для різних частин вашого проекту.
У цій статті ми розглянули основи використання PyTorch і PyTorch Lightning для глибокого навчання:
- PyTorch надає потужну та гнучку структуру для побудови нейронних мереж
- PyTorch Lightning спрощує навчання та робочі процеси розробки моделей
- Такі ключові функції, як оптимізація гіперпараметрів і керування моделлю, прискорюють дослідження глибокого навчання
З цими основами ви можете розпочати створення та навчання передових моделей, таких як CNN, RNN, GAN тощо. Активна спільнота з відкритим кодом також пропонує підтримку Lightning і доповнення, такі як Bolt, бібліотека компонентів і оптимізації.
Щасливого глибокого навчання!
Метью Майо (@mattmayo13) має ступінь магістра з інформатики та диплом з інтелектуального аналізу даних. Як головний редактор KDnuggets, Метью прагне зробити доступними концепції складних наукових даних. Його професійні інтереси включають обробку природної мови, алгоритми машинного навчання та дослідження ШІ. Він керується місією демократизації знань у спільноті науки про дані. Метью кодує з 6 років.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- PlatoHealth. Розвідка про біотехнології та клінічні випробування. Доступ тут.
- джерело: https://www.kdnuggets.com/5-steps-getting-started-pytorch?utm_source=rss&utm_medium=rss&utm_campaign=getting-started-with-pytorch-in-5-steps
- : має
- :є
- $UP
- 1
- 10
- 16
- 20
- 2016
- 7
- 8
- 84
- 9
- a
- тези
- прискорювати
- прискорений
- прискорення
- прискорення
- доступ
- доступною
- активний
- Адам
- доповнення
- просунутий
- Переваги
- AI
- Цілі
- алгоритми
- дозволяти
- Дозволити
- дозволяє
- Також
- an
- та
- Інший
- API
- Інтерфейси
- застосування
- архітектура
- ЕСТЬ
- стаття
- AS
- аспекти
- припустити
- At
- автоматизує
- автоматичний
- автоматично
- геть
- заснований
- Основи
- Байєсівський
- BE
- ставати
- було
- нижче
- Переваги
- між
- блоки
- Болт
- будувати
- Створюємо
- побудований
- вбудований
- але
- by
- розрахунок
- CAN
- можливості
- Вибирати
- ckpt
- клас
- класів
- класифікація
- код
- Кодування
- об'єднання
- приходить
- співтовариство
- порівняння
- комплекс
- компонент
- обчислення
- комп'ютер
- Інформатика
- обчислення
- поняття
- Проведення
- підтвердити
- підключений
- контроль
- конвертувати
- згорткова нейронна мережа
- Core
- Коштувати
- покритий
- створювати
- настройка
- цикл
- дані
- видобуток даних
- наука про дані
- глибокий
- глибоке навчання
- визначати
- певний
- Визначає
- Ступінь
- демократизувати
- розгортання
- призначений
- проектування
- деталь
- розвиненою
- розробників
- розробка
- Відмінності
- різний
- розподілений
- розподілене навчання
- керований
- динамічний
- Рано
- легко
- головний редактор
- з'являються
- Навколишнє середовище
- епоха
- епохи
- особливо
- оцінювати
- Навіть
- відмінно
- Експерименти
- Дослідження
- ШВИДКО
- швидше
- риси
- кілька
- Перший
- Гнучкість
- гнучкий
- Сфокусувати
- стежити
- для
- Вперед
- фонд
- Підвалини
- Рамки
- каркаси
- від
- Повний
- повністю
- функціональний
- далі
- ГАН
- отримання
- добре
- GPU
- Графічні процесори
- випускник
- графіки
- великий
- рука
- Ручки
- he
- тут
- на вищому рівні
- вище
- його
- тримає
- Як
- Однак
- HTTPS
- Налаштування гіперпараметрів
- зображення
- Класифікація зображень
- реалізація
- реалізації
- імпорт
- in
- включати
- неймовірно
- встановлювати
- інтереси
- інтуїтивний
- IT
- ЙОГО
- KDnuggets
- ключ
- знання
- мова
- шарів
- вивчення
- менше
- дозволяти
- рівень
- libraries
- бібліотека
- блискавка
- легкий
- як
- Linux
- основи linux
- ll
- загрузка
- каротаж
- від
- серія
- машина
- навчання за допомогою машини
- зробити
- РОБОТИ
- управління
- менеджер
- керівництво
- багато
- майстер
- Матвій
- Meta
- метод
- Mining
- Місія
- модель
- Моделі
- модульний
- Модулі
- більше
- найбільш
- багато
- Природний
- Природна мова
- Обробка природних мов
- Необхідність
- необхідний
- потреби
- мережу
- мережу
- мереж
- Нейронний
- нейронної мережі
- нейронні мережі
- новини
- зараз
- номер
- нумпі
- Nvidia
- of
- пропонувати
- Пропозиції
- часто
- Старий
- on
- ONE
- відкрити
- з відкритим вихідним кодом
- працювати
- операції
- оптимізація
- Оптимізувати
- оптимізований
- or
- спочатку
- OS
- Інше
- наші
- з
- над
- пакет
- частина
- особливо
- частини
- проходити
- проходить
- виступає
- plato
- Інформація про дані Платона
- PlatoData
- басейн
- популярний
- це можливо
- влада
- потужний
- передумови
- попередження
- друк
- процес
- обробка
- професійний
- проект
- правильно
- забезпечує
- цілей
- Python
- піторх
- Швидко
- швидко
- випадковий
- ставка
- швидше
- RE
- готовий
- рекомендований
- зменшити
- Знаменитий
- повторювані
- дослідження
- дослідник
- Дослідники
- результат
- результати
- повертати
- біг
- s
- зберегти
- економія
- масштабовані
- Масштабування
- наука
- Вчені
- подряпати
- Пошук
- SELF
- служити
- комплект
- установка
- установка
- Повинен
- аналогічний
- простий
- спростити
- з
- більш гладкий
- деякі
- Source
- Простір
- конкретний
- старт
- почалася
- Починаючи
- стан
- заходи
- Як і раніше
- зупинка
- структура
- такі
- сума
- РЕЗЮМЕ
- підтримка
- перемикач
- Systems
- взяття
- Тандем
- тензорний потік
- тест
- Тестування
- ніж
- Що
- Команда
- Основи
- Їх
- тим самим
- Ці
- вони
- це
- три
- через
- час
- до
- топ
- факел
- Torchvision
- поїзд
- Навчання
- два
- створеного
- унікальні особливості
- використання
- використовуваний
- використовує
- використання
- перевірка достовірності
- версія
- vs
- було
- we
- коли
- Чи
- який
- в той час як
- ВООЗ
- широко
- волі
- з
- без
- робочий
- Робочі процеси
- робочий
- лист
- X
- років
- ви
- вашу
- зефірнет