Шаг 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. Успехов в вашем исследовании и экспериментах!
00:00 – введение
03:42 – скачивание датасета с Kaggle
13:20 – метод обучения с учителем
20:05 – пайплайн обучения нейросети
Реализация пайплайна в коде:
24:09 – подготовка данных для обучения
40:50 – реализация архитектуры нейронной сети
1:00:39 – функция потерь и оптимизатор
1:14:33 – цикл обучения
1:39:27 – проверка работоспособности нейросети на кастомных изображениях
Очень толково, уроков подобного рода почти нет на YouTube.
+++++++++++++++
А какая у вас видеокарта, что 100 ит в секунду делает ?
У меня такой же почерк.
1:28:02 швиряет?) У меня ошибка в 2000%))))
всё понятно но немного растянуто
это лучший урок на который я случайно наткнулась, реально, понимание появилось только после просмотра ! спасибо, очень круто
самое главное что все сразу на примере объясняется, да приходится гуглить что то самой, но
это исключительно из-за недостатка личных знаний
в дис теперь тоже добавилась)
Здравствуйте, возникла такая ошибка:
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.
Привет, завтра ко мне приедет новый SSD. Вопрос:
хочу установить винду, но Pytorch нужен линукс. Можно ли в гугл коллабе работу всю делать с пайторчем?
Классный курс по cnc 🙂
Ничего не понятно что происходит в цикле, но было очень интересно 😃 Что там делается под капотом – не понятно. Чёрная коробка. 😄
спасибо, то что нужно, очень крутые уроки
Погоди, ты же в МАИ учился?
С каких пор оператор == возвращает число с плавающей запятой? Создатели фреймворка перегрузили оператор? Выглядит просто дико и вводит в заблуждение.
Очень классные видео у вас, но многие вещи требуется гуглить по типу различии между функциями активации и почему можно или где нужно использовать сигмовидную или релу и в чем их преимущества и недостатки. Курс немного не для новичка, а для того кто уже немного понимает Pytorch. Если вы добавите теории то уверен что ваш курс будет невероятно популярен. В любом случае я благодарен вам за курс, видео очень полезное. Очень много раз пересматривал вас и каждый раз нахожу что то новое. Миллион раз спасибо вам! Успехов!
Видео было полезным и интересным, но хотелось бы добавить, что вы использовали только тренировочную выборку, от чего нейросеть будет склонная к переобучению
Ругается на строку с :
pred = model(img)
IndexError: Demission out of range(expected to be in range of [-4, 3], but got 784
Спасибо тебе, добрый человек, за столь толковое объяснение!
Прохожу курс на степике, там в лекциях берут готовый ноутбук с кодом и бегло комментируют его, после этого остается куча вопросов. А здесь очень круто то, что ты пишешь код с нуля и комментируешь свои действия, после таких лекций не остается вопросов🙂👍
Огромное спасибо за видео, нет воды, все по делу