Глибоке занурення у машинне навчання з використанням PyTorch
Машинне навчання (ML) стало ключовим інструментом для вирішення безлічі завдань у різних областях, від аналізу даних і прогнозування до розпізнавання образів і обробки природної мови.
Одним із потужних і популярних інструментів для реалізації алгоритмів машинного навчання є бібліотека PyTorch. У цій статті ми докладно розглянемо основи машинного навчання, познайомимося з PyTorch і розберемо кроки для вивчення цієї бібліотеки, а також наведемо приклади коду і практичне застосування.
Курс з вивчення Python
Можете пройти наш безкоштовний курс з вивчення Python
Вступ до машинного навчання
Машинне навчання — це галузь штучного інтелекту (AI), у якій використовуються алгоритми для аналізу даних, виявлення патернів та прийняття рішень з мінімальним втручанням людини. Основні типи машинного навчання включають:
- Навчання з учителем (Supervised Learning). Алгоритми навчаються на розмічених даних. Приклади: лінійна регресія, логістична регресія, дерева рішень, випадковий ліс, нейронні мережі.
- Навчання без учителя (Unsupervised Learning). Алгоритми працюють з нерозміченими даними, щоб виявити приховані структури. Приклади: кластеризація (k-середні, DBSCAN), асоціації.
- Навчання з підкріпленням (Reinforcement Learning). Алгоритми навчаються на основі взаємодії з навколишнім середовищем, отримуючи нагороди або штрафи за свої дії. Приклади: Q-learning, Deep Q-Networks (DQN).
PyTorch: що це і чому його варто використовувати
PyTorch — це бібліотека для машинного навчання з відкритим вихідним кодом, розроблена Facebook AI Research. Вона особливо популярна серед дослідників і розробників завдяки своїй гнучкості, зручності та підтримці динамічних обчислювальних графів.
PyTorch використовує динамічні обчислювальні графи, що дозволяє змінювати структуру графа на льоту, спрощуючи відлагодження і експериментування. Він має інтуїтивно зрозумілий API, що робить його доступним для новачків. Також він легко інтегрується з NVIDIA CUDA, що дозволяє використовувати обчислювальну потужність графічних процесорів для прискорення навчання моделей. У нього є обширна документація і активна спільнота, що полегшує пошук прикладів і отримання допомоги.
План вивчення PyTorch
Щоб глибоко зануритися в машинне навчання з використанням PyTorch, слід дотримуватися плану, який охоплює основні аспекти бібліотеки:
- Основи PyTorch: тензори і операції
- Створення нейронних мереж за допомогою PyTorch
- Навчання моделей і обробка даних
- Сучасні архітектури нейронних мереж
- Приклади застосування PyTorch у реальних завданнях
1. Основи PyTorch: тензори і операції
Тензори — це основна структура даних у PyTorch, аналогічна масивам у NumPy, але з підтримкою операцій на GPU. Розглянемо приклад роботи з тензорами:
import torch
# Створення тензорів
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
y = torch.tensor([[5, 6], [7, 8]], dtype=torch.float32)
# Операції з тензорами
z = x + y
print(z)
# Переміщення тензора на GPU
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
z = x + y
print(z)2. Створення нейронних мереж за допомогою PyTorch
PyTorch надає модуль torch.nn для створення нейронних мереж. Розглянемо простий приклад створення одношарового перцептрона:
import torch.nn as nn
class SimpleNN(nn.Module):
def __init__(self, input_size, output_size):
super(SimpleNN, self).__init__()
self.linear = nn.Linear(input_size, output_size)
def forward(self, x):
return self.linear(x)
model = SimpleNN(input_size=2, output_size=1)
print(model)
3. Навчання моделей і обробка даних
Навчання моделей включає визначення функції втрат і оптимізатора, а також ітерацію по даних. PyTorch надає модуль torch.optim для роботи з оптимізаторами та torch.utils.data для обробки даних.
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
# Дані
inputs = torch.tensor([[1, 2], [2, 3], [3, 4]], dtype=torch.float32)
targets = torch.tensor([[2], [3], [4]], dtype=torch.float32)
dataset = TensorDataset(inputs, targets)
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
# Модель
model = SimpleNN(input_size=2, output_size=1)
# Функція втрат і оптимізатор
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# Навчання моделі
num_epochs = 100
for epoch in range(num_epochs):
for x_batch, y_batch in dataloader:
optimizer.zero_grad()
outputs = model(x_batch)
loss = criterion(outputs, y_batch)
loss.backward()
optimizer.step()
if (epoch+1) % 10 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')4. Сучасні архітектури нейронних мереж
PyTorch підтримує створення складних архітектур нейронних мереж, таких як згорткові нейронні мережі (CNN) і рекурентні нейронні мережі (RNN). Розглянемо приклад створення простої CNN для задачі класифікації зображень:
import torch.nn.functional as F
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3)
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3)
self.fc1 = nn.Linear(64 * 12 * 12, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, kernel_size=2)
x = x.view(-1, 64 * 12 * 12)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleCNN()
print(model)Курс з вивчення Python
Можете пройти наш безкоштовний курс з вивчення Python
5. Приклади застосування PyTorch у реальних завданнях
PyTorch широко використовується для вирішення реальних завдань, таких як класифікація зображень, обробка природної мови та генеративні моделі.
# Класифікація зображень на наборі даних MNIST
import torchvision
import torchvision.transforms as transforms
# Завантаження і передобробка даних
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
# Визначення моделі
class MNISTCNN(nn.Module):
def __init__(self):
super(MNISTCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.dropout1 = nn.Dropout(0.25)
self.dropout2 = nn.Dropout(0.5)
self.fc1 = nn.Linear(9216, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2)
x = self.dropout1(x)
x = torch.flatten(x, 1)
x = F.relu(self.fc1(x))
x = self.dropout2(x)
x = self.fc2(x)
return F.log_softmax(x, dim=1)
model = MNISTCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# Навчання моделі
num_epochs = 10
for epoch in range(num_epochs):
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
# Оцінка моделі
model.eval()
correct = 0
total = 0
with torch.no_grad():
for data, target in test_loader:
outputs = model(data)
_, predicted = torch.max(outputs.data, 1)
total += target.size(0)
correct += (predicted == target).sum().item()
print(f'Accuracy of the model on the test images: {100 * correct / total} %')Курс з вивчення Python
Можете пройти наш безкоштовний курс з вивчення Python
Висновок
PyTorch — це потужний інструмент для реалізації алгоритмів машинного навчання, який поєднує гнучкість і простоту використання. Почавши з основ, таких як тензори і операції, і просуваючись до створення нейронних мереж та їх навчання, ви зможете ефективно вирішувати складні завдання машинного навчання. Сучасні архітектури, такі як CNN і RNN, відкривають безліч можливостей для застосування в реальних проектах. Вивчення PyTorch допоможе вам глибше зрозуміти машинне навчання і відкриє двері до інноваційних рішень у різних галузях.
Більше цікавих новин
ChatGPT для програмістів: як використовувати ШІ в роботі
Игра на чистом JavaScript за 20 минут
Найкращі джоб-сайти, де варто розмістити резюме програміста
10 корисних порад для DevOps-інженерів