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

Функция cosine_embedding_loss

Функция cosine_embedding_loss вычисляет значение функции потерь на основе косинусного расстояния между двумя наборами эмбеддингов. Она принимает два тензора эмбеддингов x1 и x2, а также тензор меток y, который указывает, должны ли эмбеддинги быть похожими или различными. Функция полезна для задач метрического обучения, где необходимо обучить модель различать похожие и непохожие объекты.

Синтаксис

torch.nn.functional.cosine_embedding_loss( x1, x2, y, margin=0.0, reduction='mean' )

Основные параметры функции:

  • x1 - первый тензор эмбеддингов размерностью (N, D), где N - количество примеров, D - размерность эмбеддингов
  • x2 - второй тензор эмбеддингов размерностью (N, D)
  • y - тензор меток размерностью (N), содержащий значения 1 или -1, где 1 означает, что эмбеддинги должны быть похожими, а -1 - что они должны быть различными
  • margin - пороговое значение для непохожих пар, по умолчанию 0.0
  • reduction - способ уменьшения размерности результата: 'none', 'mean' или 'sum', по умолчанию 'mean'

Пример работы с похожими парами

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

import torch import torch.nn.functional as F torch.manual_seed(0) x1 = torch.tensor([ [1.0, 2.0], [0.0, 1.0], ]) x2 = torch.tensor([ [2.0, 4.0], [0.0, 2.0], ]) y = torch.tensor([1, 1]) res = F.cosine_embedding_loss(x1, x2, y) print(res)

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

tensor(0.1915)

Пример работы с различными парами

Теперь рассмотрим пример с эмбеддингами, которые должны быть различными:

import torch import torch.nn.functional as F torch.manual_seed(0) x1 = torch.tensor([ [1.0, 0.0], [-1.0, 0.0], ]) x2 = torch.tensor([ [0.0, 1.0], [0.0, -1.0], ]) y = torch.tensor([-1, -1]) res = F.cosine_embedding_loss(x1, x2, y, margin=0.5) print(res)

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

tensor(0.5000)

Пример с reduction='none'

Используем параметр reduction со значением 'none', чтобы получить потери для каждого примера отдельно:

import torch import torch.nn.functional as F torch.manual_seed(0) x1 = torch.tensor([ [1.0, 2.0, 3.0], [0.0, 1.0, 0.0], [-1.0, -2.0, -3.0], ]) x2 = torch.tensor([ [2.0, 4.0, 6.0], [0.0, 2.0, 0.0], [-2.0, -4.0, -6.0], ]) y = torch.tensor([1, -1, 1]) res = F.cosine_embedding_loss(x1, x2, y, reduction='none') print(res)

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

tensor([0.0000, 1.0000, 0.0000])

Пример с random тензорами

Продемонстрируем работу функции на случайных тензорах с разными метками:

import torch import torch.nn.functional as F torch.manual_seed(42) x1 = torch.randn(3, 4) x2 = torch.randn(3, 4) y = torch.tensor([1, -1, 1]) res = F.cosine_embedding_loss(x1, x2, y, margin=0.3) print(res)

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

tensor(0.4723)

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

  • функцию cosine_similarity,
    которая вычисляет косинусное сходство между векторами
  • функцию triplet_margin_loss,
    которая вычисляет потери для триплетов в метрическом обучении
  • функцию pairwise_distance,
    которая вычисляет попарные расстояния между векторами
  • функцию normalize,
    которая выполняет нормализацию тензоров по заданному измерению
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить