PyTorch | Lesson #0 | From A to Z: MNIST Classifier

Posted by


Шаг 1: Установка PyTorch

Прежде чем мы начнем урок, убедитесь, что у вас установлен PyTorch. Лучший способ установки PyTorch – это сначала установить Anaconda, а затем установить PyTorch с использованием conda.

Для установки Anaconda перейдите на официальный сайт Anaconda (https://www.anaconda.com/) и загрузите установщик для вашей операционной системы. Установите Anaconda, следуя инструкциям на экране.

После установки Anaconda запустите консоль и выполните следующую команду для установки PyTorch:

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

Эта команда установит PyTorch, torchvision и torchaudio с поддержкой CUDA Toolkit версии 10.2.

Шаг 2: Импорт библиотек

Перед тем, как приступить к созданию классификатора MNIST, давайте импортируем несколько необходимых библиотек.

import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

Шаг 3: Загрузка и предобработка данных

MNIST – это набор изображений рукописных цифр от 0 до 9. Давайте загрузим набор данных MNIST и предобработаем его.

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=4, shuffle=True)

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

Шаг 4: Определение архитектуры нейронной сети

Давайте определим архитектуру нейронной сети для нашего классификатора MNIST.

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        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 = F.relu(self.conv1(x))
        x = F.max_pool2d(x, 2)
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

net = Net()

Шаг 5: Определение функции потерь и оптимизатора

Определим функцию потерь и оптимизатор для обучения нашей модели.

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

Шаг 6: Обучение модели

Теперь давайте обучим нашу модель с использованием цикла обучения.

for epoch in range(2):  # количество эпох
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

Шаг 7: Тестирование модели

Наконец, проверим точность нашей модели на тестовом наборе данных MNIST.

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(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))

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

0 0 votes
Article Rating

Leave a Reply

20 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@imtes177
27 days ago

00:00 – введение
03:42 – скачивание датасета с Kaggle
13:20 – метод обучения с учителем
20:05 – пайплайн обучения нейросети

Реализация пайплайна в коде:
24:09 – подготовка данных для обучения
40:50 – реализация архитектуры нейронной сети
1:00:39 – функция потерь и оптимизатор
1:14:33 – цикл обучения
1:39:27 – проверка работоспособности нейросети на кастомных изображениях

@alext711
27 days ago

Очень толково, уроков подобного рода почти нет на YouTube.

@iegorshevchenko8365
27 days ago

+++++++++++++++

@maxosad9926
27 days ago

А какая у вас видеокарта, что 100 ит в секунду делает ?

@wylysypydystyshky
27 days ago

У меня такой же почерк.

@bohdans.1479
27 days ago

1:28:02 швиряет?) У меня ошибка в 2000%))))

@exxas-lu5rx
27 days ago

всё понятно но немного растянуто

@Dj-xs3gt
27 days ago

это лучший урок на который я случайно наткнулась, реально, понимание появилось только после просмотра ! спасибо, очень круто
самое главное что все сразу на примере объясняется, да приходится гуглить что то самой, но
это исключительно из-за недостатка личных знаний
в дис теперь тоже добавилась)

@drunkdiente7033
27 days ago

Здравствуйте, возникла такая ошибка:

RuntimeError Traceback (most recent call last)

<ipython-input-81-193704912c65> in <cell line: 1>()

2 optimizer.zero_grad()

3

—-> 4 label = nn.functional.one_hot(label, 10).float()

5 pred = model(img)

6

RuntimeError: one_hot is only applicable to index tensor.

@_tesbek_7668
27 days ago

Привет, завтра ко мне приедет новый SSD. Вопрос:
хочу установить винду, но Pytorch нужен линукс. Можно ли в гугл коллабе работу всю делать с пайторчем?

@vilovnok1238
27 days ago

Классный курс по cnc 🙂

@neuro-cinema
27 days ago

Ничего не понятно что происходит в цикле, но было очень интересно 😃 Что там делается под капотом – не понятно. Чёрная коробка. 😄

@vasav9407
27 days ago

спасибо, то что нужно, очень крутые уроки

@vvoooov
27 days ago

Погоди, ты же в МАИ учился?

@tarkhidden
27 days ago

С каких пор оператор == возвращает число с плавающей запятой? Создатели фреймворка перегрузили оператор? Выглядит просто дико и вводит в заблуждение.

@ДаниэльДарбеков
27 days ago

Очень классные видео у вас, но многие вещи требуется гуглить по типу различии между функциями активации и почему можно или где нужно использовать сигмовидную или релу и в чем их преимущества и недостатки. Курс немного не для новичка, а для того кто уже немного понимает Pytorch. Если вы добавите теории то уверен что ваш курс будет невероятно популярен. В любом случае я благодарен вам за курс, видео очень полезное. Очень много раз пересматривал вас и каждый раз нахожу что то новое. Миллион раз спасибо вам! Успехов!

@fiftyfridays
27 days ago

Видео было полезным и интересным, но хотелось бы добавить, что вы использовали только тренировочную выборку, от чего нейросеть будет склонная к переобучению

@a_lexAnd_r
27 days ago

Ругается на строку с :
pred = model(img)

IndexError: Demission out of range(expected to be in range of [-4, 3], but got 784

@АндрейКадетов-н3р
27 days ago

Спасибо тебе, добрый человек, за столь толковое объяснение!
Прохожу курс на степике, там в лекциях берут готовый ноутбук с кодом и бегло комментируют его, после этого остается куча вопросов. А здесь очень круто то, что ты пишешь код с нуля и комментируешь свои действия, после таких лекций не остается вопросов🙂👍

@loo9126
27 days ago

Огромное спасибо за видео, нет воды, все по делу

20
0
Would love your thoughts, please comment.x
()
x