PyTorch


Импорты

Общие сведения

import torch # корневой пакет
from torch.utils.data import Dataset, DataLoader # представление и загрузка наборов данных

API нейронной сети

import torch.autograd as autograd # граф вычислений
from torch import Tensor # тензорный узел в графе вычислений
import torch.nn as nn # нейронные сети
import torch.nn.functional as F # слои, активации и многое другое
import torch.optim as optim # оптимизаторы, например, градиентный спуск, ADAM и т.д.
from torch.jit import script, trace # гибридный декоратор фронтенда и трассировки jit

Torchscript и JIT

torch.jit.trace() # принимает ваш модуль или функцию и пример
                          # входные данные и отслеживает вычислительные шаги.
                          # с которыми сталкиваются данные при прохождении через модель

@script # декоратор, используемый для указания зависящего от данных
                          # поток управления в трассируемом коде

ONNX

torch.onnx.export(model, dummy data, xxxx.proto) # экспорт ONNX-формата
                                                       # модель, используя обученную модель, фиктивные
                                                       # данных и желаемого имени файла

model = onnx.load("alexnet.proto") # загрузка ONNX-модели
onnx.checker.check_model(model) # проверка того, что модель
                                                       # IR хорошо сформирована

onnx.helper.printable_graph(model.graph) # распечатать человекочитаемое
                                                       # представление графа

Vision

from torchvision import datasets, models, transforms # наборы данных по зрению,
                                                         # архитектуры &
                                                         # transforms

import torchvision.transforms as transforms # композитные преобразования

Распределенное обучение

import torch.distributed as dist # распределенное взаимодействие
from torch.multiprocessing import Process # процессы с разделением памяти

Тензоры

Создание

x = torch.randn(*size) # тензор с независимыми записями N(0,1)
x = torch.[ones|zeros](*size) # тензор со всеми 1 [или 0]
x = torch.tensor(L) # создание тензора из [вложенного] списка или ndarray L
y = x.clone() # клон x
with torch.no_grad():               # обертка кода, которая не позволяет автограду отслеживать историю тензора
requires_grad=True # arg, при установке значения True, отслеживает историю вычислений
                                    # история для будущих вычислений производных

Размерность

x.size() # возвращает кортежеподобный объект размерности
x = torch.cat(tensor_seq, dim=0) # конкатенирует тензоры по dim
y = x.view(a,b,...) # переформировывает x в размер (a,b,...)
y = x.view(-1,a) # переформирование x в размер (b,a) для некоторого b
y = x.transpose(a,b) # поменять местами размеры a и b
y = x.permute(*dims) # перестановка размеров
y = x.unsqueeze(dim) # тензор с добавленной осью
y = x.unsqueeze(dim=2) # тензор (a,b,c) -> тензор (a,b,1,c)
y = x.squeeze() # удаляет все размерности размера 1 (a,1,b,1) -> (a,b)
y = x.squeeze(dim=1) # удаляет заданную размерность размера 1 (a,1,b,1) -> (a,b,1)

Алгебра

ret = A.mm(B) # матричное умножение
ret = A.mv(x) # матрично-векторное умножение
x = x.t() # транспонирование матрицы

Использование GPU

torch.cuda.is_available # проверка наличия cuda
x = x.cuda() # перемещение данных x с
                                                            # CPU на GPU и возвращает новый объект

x = x.cpu() # перемещение данных x с GPU на CPU
                                                            # и вернуть новый объект

if not args.disable_cuda and torch.cuda.is_available():     # код, не зависящий от устройства
    args.device = torch.device('cuda') # и модульность
else:                                                       #
    args.device = torch.device('cpu') #

net.to(device) # рекурсивно преобразует их
                                                            # параметры и буферы в
                                                            # тензоры, специфичные для конкретного устройства

x = x.to(device) # копирование тензоров на устройство
                                                            # (gpu, cpu)

Глубокое обучение

nn.Linear(m,n) # полностью связанный слой из
                                              # от m до n единиц

nn.ConvXd(m,n,s) # X-мерный сверточный слой от
                                              # от m до n каналов, где X⍷{1,2,3}
                                              # и размер ядра равен s

nn.MaxPoolXd(s) # X-мерный пулирующий слой
                                              # (обозначения как выше)

nn.BatchNormXd # слой пакетной нормы
nn.RNN/LSTM/GRU # рекуррентные слои
nn.Dropout(p=0.5, inplace=False) # слой отсева для входных данных любой размерности
nn.Dropout2d(p=0.5, inplace=False) # двумерное канальное выпадение
nn.Embedding(num_embeddings, embedding_dim) # (тензорное) отображение от
                                              # индексов к векторам вкраплений

Функции потерь

nn.X # где X - L1Loss, MSELoss, CrossEntropyLoss
                                      # CTCLoss, NLLLoss, PoissonNLLLoss,
                                      # KLDivLoss, BCELoss, BCEWithLogitsLoss,
                                      # MarginRankingLoss, HingeEmbeddingLoss,
                                      # MultiLabelMarginLoss, SmoothL1Loss,
                                      # SoftMarginLoss, MultiLabelSoftMarginLoss,
                                      # CosineEmbeddingLoss, MultiMarginLoss,
                                      # или TripletMarginLoss

Функции активации

nn.X # # где X - ReLU, ReLU6, ELU, SELU, PReLU, LeakyReLU,
                                      # RReLu, CELU, GELU, Threshold, Hardshrink, HardTanh,
                                      # Sigmoid, LogSigmoid, Softplus, SoftShrink,
                                      # Softsign, Tanh, TanhShrink, Softmin, Softmax,
                                      # Softmax2d, LogSoftmax или AdaptiveSoftmaxWithLoss

Оптимизаторы

opt = optim.x(model.parameters(), ...)      # создать оптимизатор
opt.step() # обновление весов
optim.X # где X - SGD, Adadelta, Adagrad, Adam,
                                            # AdamW, SparseAdam, Adamax, ASGD,
                                            # LBFGS, RMSprop или Rprop

Планирование скорости обучения

scheduler = optim.X(optimizer,...) # создание планировщика lr
scheduler.step() # обновление lr после обновления весов оптимизатором
optim.lr_scheduler.X # где X - LambdaLR, MultiplicativeLR,
                                        # StepLR, MultiStepLR, ExponentialLR,
                                        # CosineAnnealingLR, ReduceLROnPlateau, CyclicLR,
                                        # OneCycleLR, CosineAnnealingWarmRestarts,

Утилиты данных

Наборы данных

Dataset # абстрактный класс, представляющий набор данных
TensorDataset # маркированный набор данных в виде тензоров
Concat Dataset # конкатенация наборов данных

Dataloaders и DataSamplers

DataLoader(dataset, batch_size=1, ...) # загрузка пакетов данных, не зависящих
                                            # от структуры отдельных точек данных

sampler.Sampler(dataset,...) # абстрактный класс, рассматривающий
                                            # способами выборки из набора данных

sampler.XSampler, где ...                  # Sequential, Random, SubsetRandom,
                                            # WeightedRandom, Batch, Distributed