Использование PyTorch для построения модели нейронной сети для распознавания рукописного ввода

алгоритм
Использование PyTorch для построения модели нейронной сети для распознавания рукописного ввода

Использование PyTorch для построения модели нейронной сети для распознавания рукописного ввода

PyTorch — это библиотека машинного обучения с открытым исходным кодом, основанная на библиотеке Torch, которая используется в таких приложениях, как компьютерное зрение и обработка естественного языка.Содержание этой главы будет основано на установке и построении базовой нейронной сети с помощью Torch и вычисление градиентов в качестве основного содержания.

How can we install Torch?

Torch имеет специальные методы установки в Linux, Windows, Mac и других средах разработки, сначала выполните поиск на официальном сайте.pytorch.org/, как показано ниже, мы можем получить root права... В процессе установки необходимо открыть командную строку Anaconda и ввести командную строку, приведенную ниже.

После установки Torch откройте часто используемый редактор для тестирования.

Хорошо, мы видим, что Torch успешно установлен на компьютер.

Следующие коды редактируются в Jupyter NoteBook, а способы установки типа conda в этой статье не описаны

Определение нейронных сетей в «PYTORCH»

Алгоритм глубокого обучения — это алгоритм нейронной сети, представляющий собой вычислительную систему, состоящую из нескольких уровней взаимосвязанных вычислительных блоков. Передача данных через эти взаимосвязанные блоки позволяет нейронной сети научиться аппроксимировать вычисления, необходимые для преобразования ввода в вывод. Доступно в факелеtorch.nnпакет для построения нейронных сетей.

Наиболее часто слышимый и самый простой набор данных MNIST — это данные распознавания рукописного ввода.Определение нейронной сети для набора данных MNIST требует следующих шагов.

1. Импортируйте библиотеку

2. Определите нейронную сеть инициализации

3. Укажите набор данных для построения модели

4. Пропустите данные через модель для тестирования

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

Импорт связанных библиотек для загрузки данных

Библиотеки, необходимые для построения нейронной сети:torch.nnа такжеtorch.nn.functional

import os
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

С помощью вышеуказанных модулей и классов torch.nn помогает нам создавать и обучать нейронные сети, в том числеforward(input),возвращениеoutput.

Определить, инициализировать нейронную сеть

Определяемая нами нейронная сеть поможет нам идентифицировать изображения и будет использовать встроенные свертки PyTorch. Процесс свертки добавляет каждый элемент изображения кlocal neighbors, взвешенный по ядру или небольшой матрице, поможет нам извлечь определенные признаки (обнаружение краев, резкость, размытость и т. д.) из входного изображения.

Есть два требования к классу, определяющему сетевую модель. Первый — написать ссылку __init__ на nn.Moudle. В этой функции вы определяете полностью связанные слои в вашей нейронной сети.

С помощью свертки мы выводим канал изображения из построенной модели нейронной сети, выводя цели, соответствующие 10 меткам с числами от 0 до 9, далее строит традиционный алгоритм MNIST

class Net(nn.Module):
  def __init__(self):
    super(Net, self).__init__()

    # First 2D convolutional layer, taking in 1 input channel (image),
    # outputting 32 convolutional features, with a square kernel size of 3
    self.conv1 = nn.Conv2d(1, 32, 3, 1)
    # Second 2D convolutional layer, taking in the 32 input layers,
    # outputting 64 convolutional features, with a square kernel size of 3
    self.conv2 = nn.Conv2d(32, 64, 3, 1)

    # Designed to ensure that adjacent pixels are either all 0s or all active
    # with an input probability
    self.dropout1 = nn.Dropout2d(0.25)
    self.dropout2 = nn.Dropout2d(0.5)

    # First fully connected layer
    self.fc1 = nn.Linear(9216, 128)
    # Second fully connected layer that outputs our 10 labels
    self.fc2 = nn.Linear(128, 10)

my_nn = Net()
print(my_nn)

Как показано в коде, построенная трехслойная нейронная сеть, первый двумерный приемный слой, входные данные изображения, выходные данные 32 функции, размер квадратного ядра равен 3, второй двумерныйconvolutionalСлой вводит 32 набора данных для получения 64 функций, а размер квадратного ядра равен 3.

Обучить, указав проход данных

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

class Net(nn.Module):
  def __init__(self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv2d(1, 32, 3, 1)
    self.conv2 = nn.Conv2d(32, 64, 3, 1)
    self.dropout1 = nn.Dropout2d(0.25)
    self.dropout2 = nn.Dropout2d(0.5)
    self.fc1 = nn.Linear(9216, 128)
    self.fc2 = nn.Linear(128, 10)

  # x represents our data
  def forward(self, x):
    # Pass data through conv1
    x = self.conv1(x)
    # Use the rectified-linear activation function over x
    x = F.relu(x)

    x = self.conv2(x)
    x = F.relu(x)

    # Run max pooling over x
    x = F.max_pool2d(x, 2)
    # Pass data through dropout1
    x = self.dropout1(x)
    # Flatten x with start_dim=1
    x = torch.flatten(x, 1)
    # Pass data through fc1
    x = self.fc1(x)
    x = F.relu(x)
    x = self.dropout2(x)
    x = self.fc2(x)

    # Apply softmax to x
    output = F.log_softmax(x, dim=1)
    return output

Обратитесь к документации по разработке:py torch.org/tutorials/ нет…

Рекомендуемое чтение