Workshop “Neural Network from Scratch with PyTorch”

Posted by


Мастер-класс "Нейронная сеть с 0. PyTorch" – это интересное и познавательное занятие для тех, кто хочет погрузиться в мир искусственного интеллекта и глубокого обучения. В этом мастер-классе мы изучим, как создать нейронную сеть с нуля с использованием библиотеки PyTorch.

PyTorch – это мощный инструмент для разработки нейронных сетей и глубокого обучения, который становится все более популярным среди исследователей и разработчиков. Он предоставляет удобные средства для определения архитектуры нейронных сетей, их обучения и тестирования.

Давайте начнем с создания простой нейронной сети для классификации изображений с использованием PyTorch. Прежде всего, убедитесь, что у вас установлена библиотека PyTorch. Если у вас ее нет, вы можете установить ее с помощью pip:

pip install torch

Теперь давайте определим нашу нейронную сеть. Мы создадим простую сверточную нейронную сеть с одним скрытым слоем. Вот как выглядит код для определения модели:

import torch
import torch.nn as nn
import torch.nn.functional as F

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, 3)
        self.fc1 = nn.Linear(16*26*26, 10)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.max_pool2d(x, 2)
        x = x.view(-1, 16*26*26)
        x = self.fc1(x)
        return x

model = SimpleCNN()

В этом коде мы определяем класс SimpleCNN, который наследует nn.Module. В конструкторе класса мы определяем два слоя: сверточный слой и полносвязный слой. В методе forward мы пропускаем входной тензор через сверточный слой, функцию активации ReLU, пулинг и полносвязный слой.

Теперь давайте создадим набор данных для обучения нашей модели. Для простоты мы будем использовать набор данных MNIST, который содержит черно-белые изображения цифр от 0 до 9. Вот как загрузить и предобработать данные:

import torchvision
import torchvision.transforms as transforms

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

trainset = torchvision.datasets.MNIST(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32,
                                        shuffle=True, num_workers=2)

Теперь мы готовы обучить нашу нейронную сеть. Для этого определим функцию потерь и оптимизатор, а затем запустим процесс обучения:

criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for epoch in range(5):  # обучим модель на 5 эпохах
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()

        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        if i % 100 == 0:
            print('Epoch [%d/%d], Step [%d/%d], Loss: %.4f'
                  % (epoch+1, 5, i+1, len(trainloader), loss.item()))

После обучения модели мы можем оценить ее производительность на тестовом наборе данных. Для этого загрузим тестовый набор данных MNIST и измерим точность модели на нем:

testset = torchvision.datasets.MNIST(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=32,
                                         shuffle=False, num_workers=2)

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))

Это был краткий обзор того, как создать и обучить нейронную сеть с использованием PyTorch. Надеюсь, этот мастер-класс был информативным и помог вам понять основы работы с нейронными сетями. Успехов в вашем путешествии в мир искусственного интеллекта!

0 0 votes
Article Rating
10 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@КаналСупермастерА
1 month ago

Бестолковый видос

@АлексСавелов
1 month ago

Видео, безусловно хорошее, автор молодец (респект). Но. Непонятно, зачем городить огород с классами, функциями и прочим, чтобы потом запутываться искать где ошибка? К примеру, в tensorflow эта же модель делается в строчек 5-7 без всяких хлопот.

@denzelito
1 month ago

спасибо большое, видео мне помогло разобраться!

@fludentri
1 month ago

Прекрасная обучалка, реально помогли. Спасибо, Алексей!

@acceptasis2395
1 month ago

Нашел клад)

@bul2012
1 month ago

Спасибо, будучи нулем в данной теме разобрался хоть как то что и к чему.
Запустил нейронку на 60 нейронов на 1м эпох, ошибка ниже 0.05. а и кол-во точек 500.

@ОлегЗайцев-в6к
1 month ago

Здравствуйте! Подскажите, в чем может быть проблема. Делаю по Вашему гайду, но выдает ошибку "'OurNet' object has no attribute 'fc1'"

@ДаниилЧиндин-р3й
1 month ago

Очень помогли разобраться с torch-ем, спасибо большое 🤗. Только, на заметку, я думаю, в первой реализации сети со сложными данными можно было изменять скорость обучения (learning_rate) на больший, как правило при больших и сложных данных от 0.1 до 0.2 хорошая скорость обучения и думаю, что это помогло бы апроксимировать косинус лучше 😉. Спасибо!

@obitouchiha5851
1 month ago

AttributeError: 'builtin_function_or_method' object has no attribute 'backward' выдаёт такую ошибку
что делать?

@vl_alx
1 month ago

Добрый день. Подскажите а почему у меня обработка происходит на CPU? И как перевести вычислительный процесс на GPU