it Новини Глибоке занурення у машинне навчання з використанням PyTorch
Глибоке занурення у машинне навчання з використанням PyTorch

Глибоке занурення у машинне навчання з використанням PyTorch

7 250
19 травня 2024 в 16:02

Машинне навчання (ML) стало ключовим інструментом для вирішення безлічі завдань у різних областях, від аналізу даних і прогнозування до розпізнавання образів і обробки природної мови.

Одним із потужних і популярних інструментів для реалізації алгоритмів машинного навчання є бібліотека PyTorch. У цій статті ми докладно розглянемо основи машинного навчання, познайомимося з PyTorch і розберемо кроки для вивчення цієї бібліотеки, а також наведемо приклади коду і практичне застосування.

Курс з вивчення Python

Можете пройти наш безкоштовний курс з вивчення Python

Вступ до машинного навчання

Машинне навчання — це галузь штучного інтелекту (AI), у якій використовуються алгоритми для аналізу даних, виявлення патернів та прийняття рішень з мінімальним втручанням людини. Основні типи машинного навчання включають:

  1. Навчання з учителем (Supervised Learning). Алгоритми навчаються на розмічених даних. Приклади: лінійна регресія, логістична регресія, дерева рішень, випадковий ліс, нейронні мережі.
  2. Навчання без учителя (Unsupervised Learning). Алгоритми працюють з нерозміченими даними, щоб виявити приховані структури. Приклади: кластеризація (k-середні, DBSCAN), асоціації.
  3. Навчання з підкріпленням (Reinforcement Learning). Алгоритми навчаються на основі взаємодії з навколишнім середовищем, отримуючи нагороди або штрафи за свої дії. Приклади: Q-learning, Deep Q-Networks (DQN).


PyTorch: що це і чому його варто використовувати

PyTorch — це бібліотека для машинного навчання з відкритим вихідним кодом, розроблена Facebook AI Research. Вона особливо популярна серед дослідників і розробників завдяки своїй гнучкості, зручності та підтримці динамічних обчислювальних графів. 


PyTorch використовує динамічні обчислювальні графи, що дозволяє змінювати структуру графа на льоту, спрощуючи відлагодження і експериментування. Він має інтуїтивно зрозумілий API, що робить його доступним для новачків. Також він легко інтегрується з NVIDIA CUDA, що дозволяє використовувати обчислювальну потужність графічних процесорів для прискорення навчання моделей. У нього є обширна документація і активна спільнота, що полегшує пошук прикладів і отримання допомоги.


План вивчення PyTorch

Щоб глибоко зануритися в машинне навчання з використанням PyTorch, слід дотримуватися плану, який охоплює основні аспекти бібліотеки:

  1. Основи PyTorch: тензори і операції
  2. Створення нейронних мереж за допомогою PyTorch
  3. Навчання моделей і обробка даних
  4. Сучасні архітектури нейронних мереж
  5. Приклади застосування 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 допоможе вам глибше зрозуміти машинне навчання і відкриє двері до інноваційних рішень у різних галузях.

Telegram group

Підписуйтесь на нашу групу в Телеграмі 🇺🇦

Більше цікавих новин

Коментарі
Додати коментар

Поки що коментарів немає