Функция 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,
которая выполняет нормализацию тензоров по заданному измерению