Процесс создания модели в pytorch
- Класс nn содержит все необходимое для создания нейросети
- nn.Parameter - какие параметры может наша модель пробовать обучить, обычно слой PyTorch будет настраивать их
- nn.Module - базовый класс нейросетей, все модели потомки этого класса. Должен содержать переопределенную процедуру forward
- torch.optim - оптимизатор при создании модели
- torch.inference_mode() -
прогнозированиережим вывода при прогнозировании. Убирает очень много дополнительных данных
Приближение модели к нужным параметрам происходит с помощью фукции потерь (Loss function) Она показывает, насколько сильно полученные данные отличаются от требуемых.
Оптимизатор учитывает потери модели и корректирует параметры модели.
import torch
from torch import nn
import matplotlib.pyplot as plt
'''
Задача: сделаем данные на основе линейной регрессии (линейного уравнения).
Обучим модель и попытаемся предсказать значения.
'''
def plot_data(train_data=[], train_labels=[],
test_data=[], test_labels=[],
prediction=None):
plt.figure(figsize=(10, 7))
plt.scatter(train_data, train_labels, c='b', s=4)
plt.scatter(test_data, test_labels, c='g', s=4)
if prediction is not None:
plt.scatter(test_data, prediction, c='r', s=4)
plt.show()
class LinearRegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.weights = nn.Parameter(torch.randn(1,
requires_grad=True,
dtype=torch.float))
self.bias = nn.Parameter(torch.randn (1,
requires_grad=True,
dtype=torch.float))
def forward(self, x: torch.Tensor) -> torch.Tensor:
return self.weights * x + self.bias
weight = 0.7
bias = 0.3
# стартовый набор данных
start = 0
end = 1
step = 0.02
X = torch.arange(start, end, step).unsqueeze(dim=1)
Y = weight * X + bias
# Разделим данные на обучающие 60%-80%, тестовые 20%
train_size = int(0.8 * len(X))
X_train, Y_train = X[:train_size], Y[:train_size]
X_test, Y_test = X[train_size:], Y[train_size:]
torch.manual_seed(42)
model_0 = LinearRegressionModel()
print(list(model_0.parameters()))
# делаем предсказание о качестве метки
with torch.inference_mode():
y_preds = model_0(X_test)
# Рисуем тестовые данные
plot_data(X_train, Y_train, X_test, Y_test, y_preds)
Ускорение работы прогнозирования
