Установка и настройка pytorch

    Команда Simple-Server
    03.06.2026
    11 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Мы будем работать в среде Windows, но использовать командную строку. Это делает туториал практически универсальным — те же команды можно использовать на Linux и macOS.

    Сначала создайте рабочее пространство, внутри которого вы будете работать с**** Torch Python.

    Перейдите в каталог, где хотите разместить новую директорию. И создайте папку:

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

    python3 -m venv virtualpytorch

    Чтобы виртуальная среда заработала, нужно её активировать. Сначала перейдите в созданный на предыдущем шаге каталог:

    Внутри него размещена папка Scripts (в Windows) или bin (в других ОС). Перейдите в нее, указав имя директории:

    Активируйте виртуальную среду с помощью bat-файла. Выполните в командной строке:

    Рабочее пространство готово. Следующий шаг — установка самой библиотеки.

    Самый простой способ узнать команду инсталляции — посмотреть её на официальном сайте библиотеки. На странице с описанием локального запуска есть удобная форма, в которой вам нужно выбрать необходимые параметры.

    В качестве примера установите через pip стабильную версию для Windows, которая использует CPU. Выберите эти параметры в форме и получите в ответ нужную команду:

    pip3 install torch torchvision torchaudio

    Скопируйте команду****pip install torch и выполните её в командной строке Windows. Обратите внимание, что вы устанавливаете сразу две подбиблиотеки — torchvision и torchaudio.

    • Пакет torchvision состоит из популярных наборов данных, архитектур моделей и общих преобразований изображений для компьютерного зрения.
    • torchaudio — это библиотека для обработки звука и сигналов с помощью PyTorch. Он предоставляет функции ввода-вывода, обработки сигналов и данных, наборы данных, реализации моделей и компоненты приложений.

    Это стандартный набор, который часто используют при первом знакомстве с библиотекой.

    Рассмотренный выше способ — не единственный метод инсталляции. Если на Windows установлена Anaconda, то вы можете использовать графический интерфейс. Если на компьютере используются видеокарты NVIDIA, то вы можете выбрать версию CUDA, а не CPU. Тогда и команда для инсталляции будет другой.

    Все возможные способы локального запуска библиотеки указаны в официальной документации. Там же можно найти команды для установки старых версий библиотеки.

    Чтобы проверить работоспособность библиотеки, необязательно писать скрипт. Для выполнения базовых операций достаточно возможностей интерпретатора Python.

    Если вы успешно инсталлировали библиотеку на предыдущих шагах, то задача установить интерпретатор Python перед вами уже не возникнет. Чтобы запустить его, выполните в командной строке команду:

    python import torch x = torch.rand(5, 3) print(x)

    В ответ отобразится установленная версия, а также появится интерфейс интерпретатора. Введите следующий код:

    import torch x = torch.rand(5, 3) print(x)

    Ответ должен быть примерно таким:

    tensor([[0.0925, 0.3696, 0.4949], [0.0240, 0.2642, 0.1545], [0.7274, 0.4975, 0.0753], [0.4438, 0.9685, 0.5022], [0.4757, 0.6715, 0.4298]])

    Это значит, что команда**** pytorch install выполнена успешно. Теперь можно переходить к решению более сложных задач.

    Чтобы изучать базовые концепции было интересно, будем делать это на практике. Например, давайте создадим с помощью PyTorch нейронную сеть, которая умеет определять, какая цифра изображена на картинке.

    Предварительные требования

    Для создания нейронной сети потребуется восемь импортов:

    import torch import torchvision import torch.nn.functional as F import matplotlib.pyplot as plt import torch.nn as nn import torch.optim as optim from torchvision import transforms, datasets

    Всё это элементы стандартной библиотеки PyTorch плюс библиотека Matplotlib. Они отвечают за работу с изображениями, оптимизацию, помогают с построением нейронных сетей и отображение графиков.

    Загрузка и преобразование данных

    Нейронная сеть будет обучаться на наборе данных MNIST, который содержит 70 000 изображений цифр, написанных от руки. 60 000 — для обучения, 10 000 — для тестирования. Размер изображений — 28 x 28 пикселей. У каждого из них есть метка, которая обозначает изображенную цифру — 1, 2, 5 и т.д.

    train = datasets.MNIST("", train=True, download=True, transform = transforms.Compose([transforms.ToTensor()])) test = datasets.MNIST("", train=False, download=True, transform = transforms.Compose([transforms.ToTensor()])) trainset = torch.utils.data.DataLoader(train, batch_size=15, shuffle=True) testset = torch.utils.data.DataLoader(test, batch_size=15, shuffle=True)

    Сначала необходимо разделить данные на обучающие и тестовые наборы. Вы делаете это, устанавливая train=True/False. Тестовый набор должен содержать данные, с которыми машина раньше не сталкивалась. Иначе работа нейронной сети будет предвзятой.

    Shuffle (shuffle=True) помогает уменьшить предвзятость и переоснащение. Представьте, что данные имеют много значений «1» по порядку. Допустим, машина станет слишком опытной в распознавании только единицы. Когда приходит другая цифра, машина слишком «осведомлена» (переоснащается) в идентификации определенного типа данных и поэтому застревает при распознавании других данных.

    Определение и инициализация нейронной сети

    Следующий этап — определение нейронной сети.

    class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(784, 86) self.fc2 = nn.Linear(86, 86) self.fc3 = nn.Linear(86, 86) self.fc4 = nn.Linear(86, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = F.relu(self.fc3(x)) x = self.fc4(x) return F.log_softmax(x, dim=1) model = NeuralNetwork()

    Нейронная сеть состоит из четырех слоев. Один входной, два скрытых и один выходной. Тип Linear — простая нейронная сеть.

    Для каждого слоя необходимо определить номер входа и выхода. Выходной номер слоя является входом следующего слоя.

    • Входной слой имеет 784 узла. 784 — результат умножения 28 на 28 (размер изображения в пикселях).
    • Первый слой определяется выходным числом 86. Следовательно, первый скрытый слой должен иметь входное значение 86. Та же логика применяется дальше. 86 — произвольное число. Вы можете использовать другое значение.
    • Выходной слой содержит 10 узлов, потому что изображения представляют цифры от 0 до 9.

    Каждый раз, когда данные проходят через слой, данные передаются в функцию активации.

    Есть несколько функций активации. В этом примере используется ReLU — Rectified Activation Function. Функция возвращает 0, если значение отрицательное, и само значение, если оно положительное.

    Функция softmax для вывода нормализует значение. Это дает вероятность, например, 80%, что на изображении цифра 1, 30%, что на изображении цифра 5 и т.д. Выбирается наибольшая вероятность.

    Затем начинается этап обучения.

    optimizer = optim.Adam(model.parameters(), lr=0.001) EPOCHS = 3 for epoch in range(EPOCHS): for data in trainset: X, y = data model.zero_grad() output = model(X.view(-1, 28 * 28)) loss = F.nll_loss(output, y) loss.backward() optimizer.step() print(loss)

    Оптимизатор вычисляет разницу (потери) между фактическими данными и прогнозом, корректирует вес, снова вычисляет потери и продолжает цикл до тех пор, пока потери не станут минимальными.

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

    correct = 0 total = 0 with torch.no_grad(): for data in testset: data_input, target = data output = model(data_input.view(-1, 784)) for idx, i in enumerate(output): if torch.argmax(i) == target[idx]: correct += 1 total += 1 print('Accuracy: %d %%' % (100 * correct / total))

    Чтобы убедиться в том, что нейронная сеть работает, передайте ей изображение некоторой цифры из тестового набора:

    plt.imshow(X[1].view(28,28)) plt.show() print(torch.argmax(model(X[1].view(-1, 784))[0]))

    В ответ должна отобразиться цифра, которая изображена на переданной картинке.

    Наглядно увидеть работу нейронной сети можно, запустив наш полученный скрипт:

    import torch import torchvision import torch.nn.functional as F import matplotlib.pyplot as plt import torch.nn as nn import torch.optim as optim from torchvision import transforms, datasets train = datasets.MNIST("", train=True, download=True, transform = transforms.Compose([transforms.ToTensor()])) test = datasets.MNIST("", train=False, download=True, transform = transforms.Compose([transforms.ToTensor()])) trainset = torch.utils.data.DataLoader(train, batch_size=15, shuffle=True) testset = torch.utils.data.DataLoader(test, batch_size=15, shuffle=True) class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(784, 86) self.fc2 = nn.Linear(86, 86) self.fc3 = nn.Linear(86, 86) self.fc4 = nn.Linear(86, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = F.relu(self.fc3(x)) x = self.fc4(x) return F.log_softmax(x, dim=1) model = NeuralNetwork() optimizer = optim.Adam(model.parameters(), lr=0.001) EPOCHS = 3 for epoch in range(EPOCHS): for data in trainset: X, y = data model.zero_grad() output = model(X.view(-1, 28 * 28)) loss = F.nll_loss(output, y) loss.backward() optimizer.step() print(loss) correct = 0 total = 0 with torch.no_grad(): for data in testset: data_input, target = data output = model(data_input.view(-1, 784)) for idx, i in enumerate(output): if torch.argmax(i) == target[idx]: correct += 1 total += 1 print('Accuracy: %d %%' % (100 * correct / total)) plt.imshow(X[1].view(28,28)) plt.show() print(torch.argmax(model(X[1].view(-1, 784))[0]))

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


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны