РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
550 of 769 menu

Класс HingeEmbeddingLoss

Класс HingeEmbeddingLoss реализует функцию потерь, предназначенную для обучения эмбеддингов, где цель - обеспечить малые расстояния между похожими объектами и большие расстояния между различными. Первым параметром конструктор принимает margin - границу, определяющую минимальное расстояние для различных пар. Вторым параметром можно передать reduction, который указывает способ редукции выходного значения (суммирование, среднее или отсутствие редукции).

Синтаксис

torch.nn.HingeEmbeddingLoss(margin=1.0, reduction='mean')

Параметры

Основные параметры класса:

  • margin (float) - граница, определяющая максимальное расстояние между различными парами, по умолчанию 1.0.
  • reduction (str) - способ редукции: 'none', 'mean' или 'sum'. По умолчанию 'mean'.

Пример 1

Создадим экземпляр функции потерь с границей 1.5 и применим его к двум парам векторов:

import torch # Создаем функцию потерь loss_fn = torch.nn.HingeEmbeddingLoss(margin=1.5) # Входные данные (два эмбеддинга) x = torch.tensor([2.0, 3.0, 1.0]) y = torch.tensor([1.0, 2.0, 3.0]) # Метки: 1 - похожие, -1 - различные target = torch.tensor([1.0, -1.0]) # Вычисляем потерю loss = loss_fn(x, y) print(loss)

Результат выполнения кода:

tensor(2.3333)

Пример 2

Рассмотрим случай, когда все пары являются похожими (метки равны 1). В этом случае потеря равна среднему квадрату расстояния:

import torch loss_fn = torch.nn.HingeEmbeddingLoss(margin=1.0) x = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) y = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) target = torch.tensor([1.0, 1.0]) loss = loss_fn(x, y) print(loss)

Результат выполнения кода:

tensor(0.)

Пример 3

Используем функцию потерь с редукцией 'sum' для получения суммы потерь по всем элементам батча:

import torch loss_fn = torch.nn.HingeEmbeddingLoss( margin=0.5, reduction='sum' ) x = torch.tensor([0.2, 0.8, 0.5]) y = torch.tensor([0.1, 0.9, 0.6]) target = torch.tensor([1.0, -1.0, 1.0]) loss = loss_fn(x, y) print(loss)

Результат выполнения кода:

tensor(0.6900)

Пример 4

При использовании редукции 'none' функция возвращает покомпонентные значения потерь без агрегации:

import torch loss_fn = torch.nn.HingeEmbeddingLoss( margin=0.5, reduction='none' ) x = torch.tensor([0.2, 0.8, 0.5]) y = torch.tensor([0.1, 0.9, 0.6]) target = torch.tensor([1.0, -1.0, 1.0]) loss = loss_fn(x, y) print(loss)

Результат выполнения кода:

tensor([0.0100, 0.6800, 0.0100])

Смотрите также

  • класс CosineEmbeddingLoss,
    который использует косинусное расстояние для эмбеддингов
  • класс TripletMarginLoss,
    который вычисляет потерю для троек примеров
  • класс MarginRankingLoss,
    который сравнивает расстояния между парами
  • класс MSELoss,
    который вычисляет среднеквадратичную ошибку
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить