Справочное руководство PyTorch torch.nn
PyTorchtorch.nnмодуль — это основной модуль для построения и обучения нейронных сетей. Он предоставляет богатый набор классов и функций для определения и работы с нейронными сетями.
Ниже приведеныtorch.nnНекоторые ключевые компоненты модуля и их функции:
1. Класс nn.Module:
nn.Moduleявляется базовым классом для всех пользовательских моделей нейронных сетей. Обычно пользователи наследуют свои классы моделей от этого класса и определяют в них структуру слоёв сети и функцию прямого прохода.
2. Предопределённые слои (модули):
- Включает различные типы компонентов слоёв, такие как свёрточные слои (
nn.Conv1d,nn.Conv2d,nn.Conv3d), полносвязные слои (nn.Linear), функции активации (nn.ReLU,nn.Sigmoid,nn.Tanh), и т. д.
3. Классы-контейнеры:
nn.Sequential: позволяют объединять несколько слоёв последовательно, чтобы сформировать простую линейно составленную сеть.nn.ModuleListиnn.ModuleDict: могут динамически хранить подмодули и обращаться к ним, поддерживая коллекции модулей переменной длины или именованные коллекции.
4. Функции потерь:
torch.nnСодержит ряд функций потерь для измерения различия между предсказаниями модели и истинными метками, таких как потеря среднеквадратичной ошибки (nn.MSELoss), потеря кросс-энтропии (nn.CrossEntropyLoss), и т. д.
5. Функциональный интерфейс:
nn.functional(обычно сокращается какF), содержит множество функций, которые могут напрямую работать с тензорами. Они реализуют ту же функциональность, что и объекты слоёв, но не имеют возможности сохранять и обновлять параметры. Например, вы можете использоватьF.relu()для непосредственного выполнения операций ReLU, илиF.conv2d()для выполнения операций свёртки.
6. Методы инициализации:
torch.nn.initПредоставляет некоторые часто используемые стратегии инициализации весов, такие как инициализация Xavier (nn.init.xavier_uniform_()) и инициализация Kaiming (nn.init.kaiming_uniform_()), которые имеют решающее значение для успешного обучения нейронных сетей.
7. Слои Transformer:
- PyTorch предоставляет полный набор компонентов архитектуры Transformer, включая
nn.Transformer,nn.TransformerEncoder,nn.TransformerDecoderа также механизмы вниманияnn.MultiheadAttentionи т. д.
8. Слои нормализации:
- Включают пакетную нормализацию (
BatchNorm), слойную нормализацию (LayerNorm), групповую нормализацию (GroupNorm), нормализацию экземпляра (InstanceNorm), и RMSNorm, и т. д.
Справочное руководство по модулю torch.nn PyTorch
Контейнеры нейронных сетей
| Класс/Функция | Описание |
|---|---|
torch.nn.Module |
Базовый класс для всех модулей нейронной сети. |
torch.nn.Sequential(*args) |
Последовательно объединяет несколько модулей. |
torch.nn.ModuleList(modules) |
Хранит подмодули в списке. |
torch.nn.ModuleDict(modules) |
Хранит подмодули в словаре. |
torch.nn.ParameterList(parameters) |
Хранит параметры в списке. |
torch.nn.ParameterDict(parameters) |
Хранит параметры в словаре. |
torch.nn.Parameter(data) |
Создаёт обучаемый тензор параметров. |
torch.nn.Buffer(data) |
Создаёт постоянный буфер (необучаемый параметр). |
torch.nn.Identity(*args, **kwargs) |
Слой тождественного преобразования, вход непосредственно передаётся на выход. |
Глобальные хуки
| Функция | Описание |
|---|---|
register_module_forward_pre_hook(hook) |
Регистрирует предварительный хук прямого прохода. |
register_module_forward_hook(hook) |
Регистрирует хук прямого прохода. |
register_module_backward_hook(hook) |
Регистрирует хук обратного распространения. |
register_module_full_backward_pre_hook(hook) |
Регистрирует полный предварительный хук обратного распространения. |
register_module_full_backward_hook(hook) |
Регистрирует полный хук обратного распространения. |
Линейные слои
| Класс/Функция | Описание |
|---|---|
torch.nn.Linear(in_features, out_features, bias) |
Полносвязный слой (линейное преобразование). |
torch.nn.Bilinear(in1_features, in2_features, out_features, bias) |
Билинейный слой. |
torch.nn.LazyLinear(out_features, bias) |
Линейный слой с отложенной инициализацией; автоматически определяет входную размерность во время первого прямого прохода. |
Свёрточные слои
| Класс/Функция | Описание |
|---|---|
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias, padding_mode) |
1D-свёрточный слой, обычно используется для текста и аудио. |
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias, padding_mode) |
2D-свёрточный слой, обычно используется для изображений. |
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias, padding_mode) |
3D-свёрточный слой, обычно используется для видео и объёмных данных. |
torch.nn.ConvTranspose1d(in_channels, out_channels, kernel_size, stride, padding, output_padding, groups, bias, dilation, padding_mode) |
1D-транспонированная свёртка (деконволюция), используется для апсемплинга. |
torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, output_padding, groups, bias, dilation, padding_mode) |
2D-транспонированная свёртка (деконволюция), используется для апсемплинга. |
torch.nn.ConvTranspose3d(in_channels, out_channels, kernel_size, stride, padding, output_padding, groups, bias, dilation, padding_mode) |
3D транспонированная свёртка (деконволюция), используемая для апсемплинга. |
torch.nn.Unfold(kernel_size, dilation, padding, stride) |
Разворачивает входной тензор в блоки скользящего окна. |
torch.nn.Fold(output_size, kernel_size, dilation, padding, stride) |
Объединяет развёрнутые блоки обратно в тензор. |
Слои пулинга
| Класс/Функция | Описание |
|---|---|
torch.nn.MaxPool1d(kernel_size, stride, padding, dilation, return_indices) |
1D слой максимального пулинга. |
torch.nn.MaxPool2d(kernel_size, stride, padding, dilation, return_indices, ceil_mode) |
2D слой максимального пулинга. |
torch.nn.MaxPool3d(kernel_size, stride, padding, dilation, return_indices, ceil_mode) |
3D слой максимального пулинга. |
torch.nn.MaxUnpool1d(kernel_size, stride, padding) |
1D слой обратного максимального пулинга. |
torch.nn.MaxUnpool2d(kernel_size, stride, padding) |
2D слой обратного максимального пулинга. |
torch.nn.MaxUnpool3d(kernel_size, stride, padding) |
3D слой обратного максимального пулинга. |
torch.nn.AvgPool1d(kernel_size, stride, padding) |
1D слой усредняющего пулинга. |
torch.nn.AvgPool2d(kernel_size, stride, padding, ceil_mode, count_include_pad) |
2D слой усредняющего пулинга. |
torch.nn.AvgPool3d(kernel_size, stride, padding, ceil_mode, count_include_pad) |
3D слой усредняющего пулинга. |
torch.nn.AdaptiveMaxPool1d(output_size, return_indices) |
1D адаптивный макс-пулинг, фиксированный размер выхода. |
torch.nn.AdaptiveMaxPool2d(output_size, return_indices) |
2D адаптивный макс-пулинг, фиксированный размер выхода. |
torch.nn.AdaptiveMaxPool3d(output_size, return_indices) |
3D адаптивный макс-пулинг, фиксированный размер выхода. |
torch.nn.AdaptiveAvgPool1d(output_size) |
1D адаптивный усредняющий пулинг, фиксированный размер выхода. |
torch.nn.AdaptiveAvgPool2d(output_size) |
2D адаптивный усредняющий пулинг, фиксированный размер выхода. |
torch.nn.AdaptiveAvgPool3d(output_size) |
3D адаптивный усредняющий пулинг, фиксированный размер выхода. |
torch.nn.LPPool1d(norm_type, kernel_size, stride, padding) |
1D слой Lp-пулинга. |
torch.nn.LPPool2d(norm_type, kernel_size, stride, padding) |
2D слой Lp-пулинга. |
torch.nn.FractionalMaxPool2d(kernel_size, output_size, output_ratio, return_indices) |
2D дробный макс-пулинг, с использованием случайных размеров шага. |
torch.nn.FractionalMaxPool3d(kernel_size, output_size, output_ratio, return_indices) |
3D дробный макс-пулинг, с использованием случайных размеров шага. |
Слои дополнения
| Класс/Функция | Описание |
|---|---|
torch.nn.ReflectionPad1d(padding) |
1D отражающее дополнение, копирует, отражая вдоль границы. |
torch.nn.ReflectionPad2d(padding) |
2D отражающее дополнение, копирует, отражая вдоль границы. |
torch.nn.ReflectionPad3d(padding) |
3D отражающее дополнение, копирует, отражая вдоль границы. |
torch.nn.ReplicationPad1d(padding) |
1D дополнение повторением, копирует краевые значения вдоль границы. |
torch.nn.ReplicationPad2d(padding) |
2D дополнение повторением, копирует краевые значения вдоль границы. |
torch.nn.ReplicationPad3d(padding) |
3D дополнение повторением, копирует краевые значения вдоль границы. |
torch.nn.ZeroPad1d(padding) |
1D дополнение нулями. |
torch.nn.ZeroPad2d(padding) |
2D дополнение нулями. |
torch.nn.ZeroPad3d(padding) |
3D дополнение нулями. |
torch.nn.ConstantPad1d(padding, value) |
1D константное дополнение, заполняет заданным значением. |
torch.nn.ConstantPad2d(padding, value) |
2D константное дополнение, заполняет заданным значением. |
torch.nn.ConstantPad3d(padding, value) |
3D константное дополнение, заполняет заданным значением. |
torch.nn.CircularPad1d(padding) |
1D циклическое дополнение. |
torch.nn.CircularPad2d(padding) |
2D циклическое заполнение. |
torch.nn.CircularPad3d(padding) |
3D циклическое заполнение. |
Функции активации (нелинейные активации — взвешенная сумма)
| Класс/Функция | Описание |
|---|---|
torch.nn.ReLU(inplace) |
Функция активации ReLU, f(x) = max(0, x). |
torch.nn.ReLU6(inplace) |
Функция активации ReLU6, f(x) = min(max(0, x), 6). |
torch.nn.Sigmoid() |
Сигмоидная функция активации, f(x) = 1 / (1 + exp(-x)). |
torch.nn.Tanh() |
Функция активации tanh, f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)). |
torch.nn.LeakyReLU(negative_slope, inplace) |
LeakyReLU, допускает малые градиенты для отрицательных значений. |
torch.nn.PReLU(num_parameters, init) |
Parametric ReLU, с обучаемым параметром отрицательного наклона. |
torch.nn.ELU(alpha, inplace) |
Экспоненциальная линейная единица, использует экспоненциальную функцию для отрицательных значений. |
torch.nn.CELU(alpha, inplace) |
Непрерывно дифференцируемая экспоненциальная линейная единица. |
torch.nn.SELU(inplace) |
Самонормализующаяся экспоненциальная линейная единица. |
torch.nn.GELU() |
Gaussian Error Linear Unit, обычно используемая в трансформерах. |
torch.nn.SiLU(inplace) |
Сигмоидальная линейная единица (Swish), f(x) = x * sigmoid(x). |
torch.nn.Mish(inplace) |
Функция активации Mish, f(x) = x * tanh(softplus(x)). |
torch.nn.Hardtanh(min_value, max_value, inplace) |
Жёсткий гиперболический тангенс, ограничивает диапазон выходных значений. |
torch.nn.Hardswish(inplace) |
Hard Swish, сглаженная версия ReLU6. |
torch.nn.Hardsigmoid(inplace) |
Hard Sigmoid, кусочно-линейная аппроксимация. |
torch.nn.RReLU(lower, upper, inplace) |
Randomized LeakyReLU, случайно выбирает отрицательный наклон во время обучения. |
torch.nn.Softplus(beta, threshold) |
Softplus, гладкая аппроксимация ReLU. |
torch.nn.Softshrink(lambda) |
Функция активации Softshrink. |
torch.nn.Hardshrink(lambda) |
Функция активации Hardshrink. |
torch.nn.Softsign() |
Функция активации Softsign, f(x) = x / (1 + |x|). |
torch.nn.Tanhshrink() |
Tanhshrink,f(x) = x - tanh(x). |
torch.nn.LogSigmoid() |
Log Sigmoid, f(x) = log(sigmoid(x)). |
torch.nn.Threshold(threshold, value, inplace) |
Пороговая функция активации. |
torch.nn.GLU(dim) |
Gated Linear Unit, разделяет вход на две части по заданному измерению и поэлементно их перемножает. |
Функции активации (нелинейные активации — другие)
| Класс/Функция | Описание |
|---|---|
torch.nn.Softmax(dim) |
Функция активации Softmax, преобразует значения в распределение вероятностей. |
torch.nn.Softmax2d() |
Softmax по пространственным измерениям, используется для изображений. |
torch.nn.LogSoftmax(dim) |
Log Softmax, численно устойчивая версия Softmax. |
torch.nn.Softmin(dim) |
Softmin, противоположность Softmax. |
torch.nn.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value, head_bias) |
Adaptive Log Softmax, используется для классификации с большим словарём. |
Слои нормализации
| Класс/Функция | Описание |
|---|---|
torch.nn.BatchNorm1d(num_features, eps, momentum, affine, track_running_stats) |
Одномерный слой пакетной нормализации, нормализует данные мини-батча. |
torch.nn.BatchNorm2d(num_features, eps, momentum, affine, track_running_stats) |
Двумерный слой пакетной нормализации, обычно используется в свёрточных сетях. |
torch.nn.BatchNorm3d(num_features, eps, momentum, affine, track_running_stats) |
Трёхмерный слой пакетной нормализации, используется для трёхмерных данных, таких как видео. |
torch.nn.LazyBatchNorm1d() |
Одномерная пакетная нормализация с отложенной инициализацией. |
torch.nn.LazyBatchNorm2d() |
Двумерная пакетная нормализация с отложенной инициализацией. |
torch.nn.LazyBatchNorm3d() |
Трёхмерная пакетная нормализация с отложенной инициализацией. |
torch.nn.LayerNorm(normalized_shape, eps, elementwise_affine) |
Слоевая нормализация, обычно используемая в трансформерах. |
torch.nn.GroupNorm(num_groups, num_channels, eps, affine) |
Групповая нормализация, нормализует после группировки каналов. |
torch.nn.InstanceNorm1d(num_features, eps, momentum, affine, track_running_stats) |
Одномерная нормализация экземпляра, используемая для переноса стиля. |
torch.nn.InstanceNorm2d(num_features, eps, momentum, affine, track_running_stats) |
Двумерная нормализация экземпляра, используемая для переноса стиля. |
torch.nn.InstanceNorm3d(num_features, eps, momentum, affine, track_running_stats) |
Трёхмерная нормализация экземпляра, используемая для переноса стиля. |
torch.nn.SyncBatchNorm(num_features, eps, momentum, affine, track_running_stats, process_group) |
Синхронизированная пакетная нормализация, используемая для распределённого обучения на нескольких GPU. |
torch.nn.LocalResponseNorm(k, alpha, beta, size) |
Локальная нормализация отклика, используемая в свёрточных нейронных сетях для латерального торможения. |
torch.nn.RMSNorm(normalized_shape, eps, elementwise_affine) |
RMS-нормализация, обычно используемая в трансформерах. |
Слои рекуррентных нейронных сетей.
| Класс/Функция | Описание |
|---|---|
torch.nn.RNN(input_size, hidden_size, num_layers, nonlinearity, bias, batch_first, dropout, bidirectional) |
Простой слой RNN. |
torch.nn.LSTM(input_size, hidden_size, num_layers, bias, batch_first, dropout, bidirectional, proj_size) |
Слой LSTM (долгая краткосрочная память). |
torch.nn.GRU(input_size, hidden_size, num_layers, bias, batch_first, dropout, bidirectional, proj_size) |
Слой GRU (управляемый рекуррентный блок). |
torch.nn.RNNCell(input_size, hidden_size, bias, nonlinearity) |
Ячейка RNN (одиночный слой). |
torch.nn.LSTMCell(input_size, hidden_size, bias) |
Ячейка LSTM (одиночный слой). |
torch.nn.GRUCell(input_size, hidden_size, bias) |
Ячейка GRU (одиночный слой). |
Слои Transformer
| Класс/Функция | Описание |
|---|---|
torch.nn.Transformer(d_model, nhead, num_encoder_layers, num_decoder_layers, dim_feedforward, dropout, activation, custom_encoder, custom_decoder, layer_norm_eps, normalize_before, need_src_mask, need_tgt_mask, need_memory_mask, batch_first, norm_first, bias) |
Полная модель Transformer. |
torch.nn.TransformerEncoder(encoder_layer, num_layers, norm) |
Энкодер Transformer. |
torch.nn.TransformerDecoder(decoder_layer, num_layers, norm) |
Декодер Transformer. |
torch.nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout, activation, layer_norm_eps, batch_first, norm_first, bias) |
Слой энкодера Transformer. |
torch.nn.TransformerDecoderLayer(d_model, nhead, dim_feedforward, dropout, activation, layer_norm_eps, batch_first, norm_first, bias) |
Слой декодера Transformer. |
torch.nn.MultiheadAttention(embed_dim, num_heads, dropout, bias, add_bias_kv, add_zero_attn, kdim, vdim, batch_first) |
Механизм многоголового внимания. |
Механизмы внимания
| Функция | Описание |
|---|---|
torch.nn.functional.scaled_dot_product_attention(query, key, value, attn_mask, dropout_p, is_causal) |
Масштабированное внимание на основе скалярного произведения, оптимизированная реализация механизма внимания в PyTorch. |
torch.nn.attention.sdpa_kernel(backends) |
Устанавливает бэкенд внимания SDP (Scaled Dot-Product). |
Слои встраивания (разреженные слои)
| Класс/Функция | Описание |
|---|---|
torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse) |
Слой встраивания, отображает дискретные индексы в плотные векторы. |
torch.nn.EmbeddingBag(num_embeddings, embedding_dim, max_norm, norm_type, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx) |
Embedding bag, агрегирует несколько встраиваний. |
Слои Dropout
| Класс/Функция | Описание |
|---|---|
torch.nn.Dropout(p, inplace) |
Слой Dropout, случайным образом обнуляет элементы входных данных. |
torch.nn.Dropout1d(p, inplace) |
Одномерный Dropout, используется для одномерных входных данных. |
torch.nn.Dropout2d(p, inplace) |
Двумерный Dropout, используется для двумерных карт признаков. |
torch.nn.Dropout3d(p, inplace) |
Трёхмерный Dropout, используется для трёхмерных объёмов признаков. |
torch.nn.AlphaDropout(p, inplace) |
Alpha Dropout, сохраняет свойства самонормализации. |
torch.nn.FeatureAlphaDropout(p, inplace) |
Feature Alpha Dropout. |
Слои компьютерного зрения
| Класс/Функция | Описание |
|---|---|
torch.nn.PixelShuffle(upscale_factor) |
Pixel shuffle, преобразует размерности каналов в пространственные размерности (апсемплинг). |
torch.nn.PixelUnshuffle(downscale_factor) |
Inverse pixel shuffle, преобразует пространственные размерности в размерности каналов (даунсемплинг). |
torch.nn.Upsample(size, scale_factor, mode, align_corners, recompute_scale_factor) |
Слой апсемплинга. |
torch.nn.UpsamplingNearest2d(size, scale_factor) |
Двумерный апсемплинг методом ближайшего соседа. |
torch.nn.UpsamplingBilinear2d(size, scale_factor, align_corners) |
Двумерный билинейный апсемплинг. |
torch.nn.ChannelShuffle(groups) |
Channel shuffle, используется для сетей ChannelShuffle. |
Функции потерь
| Класс/Функция | Описание |
|---|---|
torch.nn.MSELoss(size_average, reduce, reduction) |
Потеря среднеквадратичной ошибки. |
torch.nn.L1Loss(size_average, reduce, reduction) |
Потеря L1 (средняя абсолютная ошибка). |
torch.nn.CrossEntropyLoss(weight, size_average, ignore_index, reduce, reduction, label_smoothing) |
Потеря кросс-энтропии, используется для задач многоклассовой классификации. |
torch.nn.NLLLoss(weight, size_average, ignore_index, reduce, reduction) |
Потеря отрицательного логарифмического правдоподобия. |
torch.nn.BCELoss(weight, size_average, reduce, reduction) |
Потеря бинарной кросс-энтропии (бинарная классификация). |
torch.nn.BCEWithLogitsLoss(weight, pos_weight, size_average, reduce, reduction, label_smoothing) |
Потеря бинарной кросс-энтропии с Sigmoid, численно более устойчива. |
torch.nn.KLDivLoss(size_average, reduce, reduction, log_target) |
Потеря KL-дивергенции, используется для сопоставления распределений. |
torch.nn.HuberLoss(delta, size_average, reduce, reduction) |
Потеря Huber, комбинация L1 и L2, более устойчива к выбросам. |
torch.nn.SmoothL1Loss(beta, size_average, reduce, reduction) |
Потеря Smooth L1 (вариант потери Huber). |
torch.nn.CTCLoss(blank, reduction, zero_infinity) |
Потеря Connectionist Temporal Classification, используется для последовательностных задач, таких как распознавание речи. |
torch.nn.PoissonNLLLoss(log_input, full, size_average, reduce, reduction) |
Потеря отрицательного логарифмического правдоподобия Пуассона. |
torch.nn.GaussianNLLLoss(full, size_average, reduce, reduction) |
Потеря отрицательного логарифмического правдоподобия Гаусса. |
torch.nn.MarginRankingLoss(margin, size_average, reduce, reduction) |
Потеря ранжирования с margin, используется для обучения ранжированию. |
torch.nn.HingeEmbeddingLoss(margin, size_average, reduce, reduction) |
Потеря Hinge для эмбеддингов, используется для метрического обучения. |
torch.nn.MultiLabelMarginLoss(size_average, reduce, reduction) |
Многометочная потеря с margin. |
torch.nn.SoftMarginLoss(size_average, reduce, reduction) |
Потеря с мягким margin. |
torch.nn.MultiLabelSoftMarginLoss(weight, size_average, reduce, reduction) |
Многометочная потеря с мягким margin. |
torch.nn.CosineEmbeddingLoss(margin, size_average, reduce, reduction) |
Cosine embedding loss, используется для метрического обучения. |
torch.nn.MultiMarginLoss(p, margin, weight, size_average, reduce, reduction) |
Multi-class margin loss. |
torch.nn.TripletMarginLoss(margin, p, eps, swap, size_average, reduce, reduction) |
Triplet loss, используется для метрического и контрастивного обучения. |
torch.nn.TripletMarginWithDistanceLoss(distance_function, margin, swap, size_average, reduce, reduction) |
Triplet loss с функцией расстояния. |
Функции расстояния
| Класс/Функция | Описание |
|---|---|
torch.nn.PairwiseDistance(p, eps, keepdim) |
Вычисление попарных расстояний. |
torch.nn.CosineSimilarity(dim, eps) |
Вычисление косинусного сходства. |
Параллельные слои (DataParallel)
| Класс/Функция | Описание |
|---|---|
torch.nn.DataParallel(module, device_ids, output_device, dim) |
Параллелизм данных, запускает модель параллельно на нескольких GPU. |
torch.nn.parallel.DistributedDataParallel(module, device_ids, broadcast_buffers, bucket_cap_mb, find_unused_parameters, gradient_as_bucket_view, static_graph) |
Распределённый параллелизм данных, используется для многоузлового распределённого обучения. |
Вспомогательные функции (nn.functional)
| Функция | Описание |
|---|---|
torch.nn.functional.relu(input, inplace) |
Применяет функцию активации ReLU. |
torch.nn.functional.sigmoid(input) |
Применяет функцию активации Sigmoid. |
torch.nn.functional.tanh(input) |
Применяет функцию активации Tanh. |
torch.nn.functional.softmax(input, dim, dtype) |
Применяет функцию активации Softmax. |
torch.nn.functional.log_softmax(input, dim, dtype) |
Применяет функцию активации Log Softmax. |
torch.nn.functional.gelu(input) |
Применяет функцию активации GELU. |
torch.nn.functional.silu(input) |
Применяет функцию активации SiLU (Swish). |
torch.nn.functional.mish(input) |
Применяет функцию активации Mish. |
torch.nn.functional.hardswish(input) |
Применяет функцию активации Hardswish. |
torch.nn.functional.leaky_relu(input, negative_slope, inplace) |
Применяет функцию активации LeakyReLU. |
torch.nn.functional.elu(input, alpha, inplace) |
Применяет функцию активации ELU. |
torch.nn.functional.dropout(input, p, training, inplace) |
Применяет Dropout. |
torch.nn.functional.conv1d(input, weight, bias, stride, padding, dilation, groups) |
Одномерная операция свёртки. |
torch.nn.functional.conv2d(input, weight, bias, stride, padding, dilation, groups) |
Двумерная операция свёртки. |
torch.nn.functional.conv3d(input, weight, bias, stride, padding, dilation, groups) |
Трёхмерная операция свёртки. |
torch.nn.functional.max_pool1d(input, kernel_size, stride, padding, dilation, return_indices) |
Одномерное объединение по максимуму. |
torch.nn.functional.max_pool2d(input, kernel_size, stride, padding, dilation, return_indices, ceil_mode) |
Двумерное объединение по максимуму. |
torch.nn.functional.avg_pool1d(input, kernel_size, stride, padding, ceil_mode, count_include_pad) |
Одномерное объединение по среднему. |
torch.nn.functional.avg_pool2d(input, kernel_size, stride, padding, ceil_mode, count_include_pad) |
Двумерное объединение по среднему. |
torch.nn.functional.linear(input, weight, bias) |
Линейное преобразование (умножение матриц). |
torch.nn.functional.cross_entropy(input, target, weight, size_average, ignore_index, reduce, reduction, label_smoothing) |
Вычисляет потерю кросс-энтропии. |
torch.nn.functional.mse_loss(input, target, size_average, reduce, reduction) |
Вычисляет потерю среднеквадратичной ошибки. |
torch.nn.functional.l1_loss(input, target, size_average, reduce, reduction) |
Вычисляет потерю L1. |
torch.nn.functional.binary_cross_entropy(input, target, weight, size_average, reduce, reduction) |
Вычисляет потерю бинарной кросс-энтропии. |
torch.nn.functional.nll_loss(input, target, weight, size_average, ignore_index, reduce, reduction) |
Вычисляет потерю отрицательного логарифмического правдоподобия. |
torch.nn.functional.huber_loss(input, target, delta, size_average, reduce, reduction) |
Вычисляет потерю Хубера. |
torch.nn.functional.batch_norm(input, running_mean, running_var, weight, bias, training, momentum, eps, track_running_stats) |
Операция пакетной нормализации. |
torch.nn.functional.layer_norm(input, normalized_shape, weight, bias, eps) |
Операция послойной нормализации. |
torch.nn.functional.group_norm(input, num_groups, weight, bias, eps) |
Операция групповой нормализации. |
torch.nn.functional.interpolate(input, size, scale_factor, mode, align_corners, recompute_scale_factor) |
Интерполяция (повышающая/понижающая дискретизация). |
torch.nn.functional.grid_sample(input, grid, mode, padding_mode, align_corners) |
Выборка по сетке, используется для регистрации изображений и пространственных трансформерных сетей. |
torch.nn.functional.affine_grid(theta, size, align_corners) |
Генерация аффинной сетки, используется для пространственных трансформерных сетей. |
torch.nn.functional.pixel_shuffle(input, upscale_factor) |
Перестановка пикселей. |
torch.nn.functional.pixel_unshuffle(input, downscale_factor) |
Обратная перестановка пикселей. |
torch.nn.functional.pad(input, pad, mode, value) |
Операция дополнения. |
torch.nn.functional.one_hot(tensor, num_classes) |
Преобразует целые числа в one-hot-кодирование. |
torch.nn.functional.embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse) |
Операция встраивания. |
torch.nn.functional.cosine_similarity(x1, x2, dim, eps) |
Вычисление косинусного сходства. |
torch.nn.functional.pairwise_distance(x1, x2, p, eps, keepdim) |
Вычисление попарных расстояний. |
Вспомогательные функции (nn.utils)
| Функция | Описание |
|---|---|
torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type, error_if_nonfinite) |
Обрезает норму градиента (in-place операция). |
torch.nn.utils.clip_grad_norm(parameters, max_norm, norm_type) |
Обрезает норму градиента (не in-place). |
torch.nn.utils.clip_grad_value_(parameters, clip_value) |
Обрезает диапазон значений градиента. |
torch.nn.utils.get_total_norm(parameters, norm_type) |
Вычисляет общую норму градиента. |
torch.nn.utils.weight_norm(module, name, dim) |
Применяет нормализацию весов к параметрам модуля. |
torch.nn.utils.remove_weight_norm(module, name) |
Удаляет нормализацию весов. |
torch.nn.utils.spectral_norm(module, name, n_power_iterations, eps, bias) |
Применяет спектральную нормализацию к параметрам модуля. |
torch.nn.utils.remove_spectral_norm(module, name) |
Удаляет спектральную нормализацию. |
torch.nn.utils.fuse_conv_bn_eval(conv, bn) |
Объединяет свёрточные слои и слои пакетной нормализации (режим вывода). |
torch.nn.utils.fuse_linear_bn_eval(linear, bn) |
Объединяет линейные слои и слои пакетной нормализации (режим вывода). |
torch.nn.utils.skip_init(module_class, *args, **kwargs) |
Пропускает инициализацию параметров. |
torch.nn.utils.parameters_to_vector(parameters) |
Преобразует список параметров в вектор. |
torch.nn.utils.vector_to_parameters(vector, parameters) |
Преобразует вектор в список параметров. |
Инициализация параметров (nn.init)
| Функция | Описание |
|---|---|
torch.nn.init.zeros_(tensor) |
Инициализирует тензор нулями. |
torch.nn.init.ones_(tensor) |
Инициализирует тензор единицами. |
torch.nn.init.uniform_(tensor, a, b) |
Инициализация равномерным распределением. |
torch.nn.init.normal_(tensor, mean, std) |
Инициализация нормальным распределением. |
torch.nn.init.constant_(tensor, val) |
Инициализация константным значением. |
torch.nn.init.eye_(tensor) |
Инициализация единичной матрицей (применимо только к двумерным квадратным матрицам). |
torch.nn.init.dirac_(tensor) |
Инициализация дельтой Дирака (сохраняет количество входных каналов). |
torch.nn.init.xavier_uniform_(tensor, gain) |
Инициализация равномерным распределением Xavier. |
torch.nn.init.xavier_normal_(tensor, gain) |
Инициализация нормальным распределением Xavier. |
torch.nn.init.kaiming_uniform_(tensor, a, mode, nonlinearity) |
Инициализация равномерным распределением Kaiming, подходит для активаций ReLU. |
torch.nn.init.kaiming_normal_(tensor, a, mode, nonlinearity) |
Инициализация нормальным распределением Kaiming, подходит для активаций ReLU. |
torch.nn.init.trunc_normal_(tensor, mean, std, a, b) |
Инициализация усечённым нормальным распределением. |
torch.nn.init.orthogonal_(tensor, gain) |
Ортогональная инициализация. |
torch.nn.init.sparse_(tensor, sparsity, std) |
Разреженная инициализация (в основном нули). |
torch.nn.init.calculate_gain(nonlinearity, param) |
Вычислить значение коэффициента усиления инициализации. |
Вспомогательные функции для RNN
| Функция | Описание |
|---|---|
torch.nn.utils.rnn.PackedSequence |
Упаковать последовательности для обработки последовательностей переменной длины. |
torch.nn.utils.rnn.pack_padded_sequence(input, lengths, batch_first, enforce_sorted) |
Упаковать дополненные последовательности. |
torch.nn.utils.rnn.pad_packed_sequence(input, batch_first, padding_value, total_length) |
Распаковать последовательности. |
torch.nn.utils.rnn.pad_sequence(sequences, batch_first, padding_value) |
Дополнить последовательности до одинаковой длины. |
torch.nn.utils.rnn.pack_sequence(sequences, enforce_sorted) |
Напрямую упаковать список последовательностей. |
Функции прореживания
| Функция | Описание |
|---|---|
torch.nn.utils.prune.random_unstructured(module, name, amount) |
Случайное неструктурированное прореживание. |
torch.nn.utils.prune.l1_unstructured(module, name, amount) |
Неструктурированное прореживание L1. |
torch.nn.utils.prune.global_unstructured(parameters, pruning_method, amount) |
Глобальное неструктурированное прореживание. |
torch.nn.utils.prune.remove(module, name) |
Удалить прореживание. |
torch.nn.utils.prune.is_pruned(module) |
Проверить, был ли модуль прорежен. |
Слой Flatten
| Класс/Функция | Описание |
|---|---|
torch.nn.Flatten(start_dim, end_dim) |
Flatten тензора, преобразование многомерного тензора в двумерный. |
torch.nn.Unflatten(dim, unflattened_size) |
Unflatten, преобразование одномерного тензора в многомерный. |
Пример
Пример
import torch
import torch.nn as nn
# Определить простую нейронную сеть
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 20)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(20, 1)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# Создать модель и входные данные
model = SimpleNet()
input = torch.randn(5, 10)
output = model(input)
print(output)
import torch.nn as nn
# Определить простую нейронную сеть
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 20)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(20, 1)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# Создать модель и входные данные
model = SimpleNet()
input = torch.randn(5, 10)
output = model(input)
print(output)
Пример: классификация изображений с использованием CNN
import torch
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
# Свёрточный слой
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)
self.conv3 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
# Слой пулинга
self.pool = nn.MaxPool2d(2, 2)
# Пакетная нормализация
self.bn1 = nn.BatchNorm2d(16)
self.bn2 = nn.BatchNorm2d(32)
self.bn3 = nn.BatchNorm2d(64)
# Функция активации
self.relu = nn.ReLU()
# Полносвязный слой
self.fc1 = nn.Linear(64 * 4 * 4, 256)
self.fc2 = nn.Linear(256, 10)
# Dropout
self.dropout = nn.Dropout(0.5)
def forward(self, x):
# Свёртка -> BN -> ReLU -> Пул
x = self.pool(self.relu(self.bn1(self.conv1(x))))
x = self.pool(self.relu(self.bn2(self.conv2(x))))
x = self.pool(self.relu(self.bn3(self.conv3(x))))
# Выравнивание
x = x.view(x.size(0), -1)
# FC -> ReLU -> Dropout -> FC
x = self.dropout(self.relu(self.fc1(x)))
x = self.fc2(x)
return x
# Создание модели
model = CNN()
print(model)
# Проверка прямого распространения
input_tensor = torch.randn(1, 3, 32, 32)
output = model(input_tensor)
print("Форма выхода:", output.shape)
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
# Свёрточный слой
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)
self.conv3 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
# Слой пулинга
self.pool = nn.MaxPool2d(2, 2)
# Пакетная нормализация
self.bn1 = nn.BatchNorm2d(16)
self.bn2 = nn.BatchNorm2d(32)
self.bn3 = nn.BatchNorm2d(64)
# Функция активации
self.relu = nn.ReLU()
# Полносвязный слой
self.fc1 = nn.Linear(64 * 4 * 4, 256)
self.fc2 = nn.Linear(256, 10)
# Dropout
self.dropout = nn.Dropout(0.5)
def forward(self, x):
# Свёртка -> BN -> ReLU -> Пул
x = self.pool(self.relu(self.bn1(self.conv1(x))))
x = self.pool(self.relu(self.bn2(self.conv2(x))))
x = self.pool(self.relu(self.bn3(self.conv3(x))))
# Выравнивание
x = x.view(x.size(0), -1)
# FC -> ReLU -> Dropout -> FC
x = self.dropout(self.relu(self.fc1(x)))
x = self.fc2(x)
return x
# Создание модели
model = CNN()
print(model)
# Проверка прямого распространения
input_tensor = torch.randn(1, 3, 32, 32)
output = model(input_tensor)
print("Форма выхода:", output.shape)
Пример: классификация текста с использованием LSTM
import torch
import torch.nn as nn
class LSTMClassifier(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers, output_dim):
super(LSTMClassifier, self).__init__()
# Слой эмбеддингов
self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx=0)
# Слой LSTM
self.lstm = nn.LSTM(
embedding_dim,
hidden_dim,
num_layers=num_layers,
batch_first=True,
bidirectional=True,
dropout=0.5
)
# Полносвязный слой
self.fc = nn.Linear(hidden_dim * 2, output_dim)
# Dropout
self.dropout = nn.Dropout(0.5)
def forward(self, text, text_lengths):
# Embedding
embedded = self.embedding(text)
# Упаковка последовательностей для обработки входных данных переменной длины
packed = nn.utils.rnn.pack_padded_sequence(
embedded, text_lengths.cpu(), batch_first=True, enforce_sorted=False
)
# LSTM
packed_output, (hidden, cell) = self.lstm(packed)
# Распаковка
output, output_lengths = nn.utils.rnn.pad_packed_sequence(packed_output, batch_first=True)
# Объединить финальные скрытые состояния двунаправленного слоя
hidden = torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1)
# Dropout и полносвязный слой
hidden = self.dropout(hidden)
output = self.fc(hidden)
return output
# Параметры
vocab_size = 10000
embedding_dim = 128
hidden_dim = 256
num_layers = 2
output_dim = 5 # 5 классов
# Создание модели
model = LSTMClassifier(vocab_size, embedding_dim, hidden_dim, num_layers, output_dim)
print(model)
import torch.nn as nn
class LSTMClassifier(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers, output_dim):
super(LSTMClassifier, self).__init__()
# Слой эмбеддингов
self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx=0)
# Слой LSTM
self.lstm = nn.LSTM(
embedding_dim,
hidden_dim,
num_layers=num_layers,
batch_first=True,
bidirectional=True,
dropout=0.5
)
# Полносвязный слой
self.fc = nn.Linear(hidden_dim * 2, output_dim)
# Dropout
self.dropout = nn.Dropout(0.5)
def forward(self, text, text_lengths):
# Embedding
embedded = self.embedding(text)
# Упаковка последовательностей для обработки входных данных переменной длины
packed = nn.utils.rnn.pack_padded_sequence(
embedded, text_lengths.cpu(), batch_first=True, enforce_sorted=False
)
# LSTM
packed_output, (hidden, cell) = self.lstm(packed)
# Распаковка
output, output_lengths = nn.utils.rnn.pad_packed_sequence(packed_output, batch_first=True)
# Объединить финальные скрытые состояния двунаправленного слоя
hidden = torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1)
# Dropout и полносвязный слой
hidden = self.dropout(hidden)
output = self.fc(hidden)
return output
# Параметры
vocab_size = 10000
embedding_dim = 128
hidden_dim = 256
num_layers = 2
output_dim = 5 # 5 классов
# Создание модели
model = LSTMClassifier(vocab_size, embedding_dim, hidden_dim, num_layers, output_dim)
print(model)
Пример: использование Transformer Encoder
import torch
import torch.nn as nn
class TransformerClassifier(nn.Module):
def __init__(self, input_dim, d_model, nhead, num_layers, dim_feedforward, output_dim, dropout):
super(TransformerClassifier, self).__init__()
# Слой эмбеддингов
self.embedding = nn.Linear(input_dim, d_model)
# Позиционное кодирование
self.positional_encoding = nn.Parameter(torch.randn(1, 1000, d_model) * 0.1)
# Слой энкодера Transformer
encoder_layer = nn.TransformerEncoderLayer(
d_model=d_model,
nhead=nhead,
dim_feedforward=dim_feedforward,
dropout=dropout,
batch_first=True
)
# Энкодер Transformer
self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers)
# Головка классификации
self.fc = nn.Linear(d_model, output_dim)
self.dropout = nn.Dropout(dropout)
def forward(self, x):
# Добавить позиционное кодирование
seq_len = x.size(1)
x = self.embedding(x) + self.positional_encoding[:, :seq_len, :]
# Кодирование трансформером
x = self.transformer_encoder(x)
# Использовать выход в первой позиции для классификации (аналогично токену CLS)
x = x[:, 0, :]
x = self.dropout(x)
x = self.fc(x)
return x
# Параметры
input_dim = 512
d_model = 512
nhead = 8
num_layers = 6
dim_feedforward = 2048
output_dim = 10
dropout = 0.1
# Создание модели
model = TransformerClassifier(input_dim, d_model, nhead, num_layers, dim_feedforward, output_dim, dropout)
print(model)
#
x = torch.randn(32, 100, input_dim) # batch_size=32, seq_len=100
output = model(x)
print("Форма выхода:", output.shape) # (32, 10)
import torch.nn as nn
class TransformerClassifier(nn.Module):
def __init__(self, input_dim, d_model, nhead, num_layers, dim_feedforward, output_dim, dropout):
super(TransformerClassifier, self).__init__()
# Слой эмбеддингов
self.embedding = nn.Linear(input_dim, d_model)
# Позиционное кодирование
self.positional_encoding = nn.Parameter(torch.randn(1, 1000, d_model) * 0.1)
# Слой энкодера Transformer
encoder_layer = nn.TransformerEncoderLayer(
d_model=d_model,
nhead=nhead,
dim_feedforward=dim_feedforward,
dropout=dropout,
batch_first=True
)
# Энкодер Transformer
self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers)
# Головка классификации
self.fc = nn.Linear(d_model, output_dim)
self.dropout = nn.Dropout(dropout)
def forward(self, x):
# Добавить позиционное кодирование
seq_len = x.size(1)
x = self.embedding(x) + self.positional_encoding[:, :seq_len, :]
# Кодирование трансформером
x = self.transformer_encoder(x)
# Использовать выход в первой позиции для классификации (аналогично токену CLS)
x = x[:, 0, :]
x = self.dropout(x)
x = self.fc(x)
return x
# Параметры
input_dim = 512
d_model = 512
nhead = 8
num_layers = 6
dim_feedforward = 2048
output_dim = 10
dropout = 0.1
# Создание модели
model = TransformerClassifier(input_dim, d_model, nhead, num_layers, dim_feedforward, output_dim, dropout)
print(model)
#
x = torch.randn(32, 100, input_dim) # batch_size=32, seq_len=100
output = model(x)
print("Форма выхода:", output.shape) # (32, 10)
Если вам нужна более подробная информация, обратитесь кофициальной документации PyTorch。
Другие расширения