[FEATURE] Add euclidean_similarity
and margin_loss
This commit is contained in:
parent
6e8a52e371
commit
42eb53d73a
@ -98,6 +98,13 @@ def rslvq_loss(probabilities, targets, prototype_labels):
|
||||
return -1.0 * log_likelihood
|
||||
|
||||
|
||||
def margin_loss(y_pred, y_true, margin=0.3):
|
||||
"""Compute the margin loss."""
|
||||
dp = torch.sum(y_true * y_pred, dim=-1)
|
||||
dm = torch.max(y_pred - y_true, dim=-1).values
|
||||
return torch.nn.functional.relu(dm - dp + margin)
|
||||
|
||||
|
||||
class GLVQLoss(torch.nn.Module):
|
||||
def __init__(self, margin=0.0, squashing="identity", beta=10, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
@ -112,6 +119,19 @@ class GLVQLoss(torch.nn.Module):
|
||||
return torch.sum(batch_loss, dim=0)
|
||||
|
||||
|
||||
class MarginLoss(torch.nn.modules.loss._Loss):
|
||||
def __init__(self,
|
||||
margin=0.3,
|
||||
size_average=None,
|
||||
reduce=None,
|
||||
reduction="mean"):
|
||||
super().__init__(size_average, reduce, reduction)
|
||||
self.margin = margin
|
||||
|
||||
def forward(self, y_pred, y_true):
|
||||
return margin_loss(y_pred, y_true, self.margin)
|
||||
|
||||
|
||||
class NeuralGasEnergy(torch.nn.Module):
|
||||
def __init__(self, lm, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -2,6 +2,18 @@
|
||||
|
||||
import torch
|
||||
|
||||
from .distances import euclidean_distance
|
||||
|
||||
|
||||
def gaussian(x, variance=1.0):
|
||||
return torch.exp(-(x * x) / (2 * variance))
|
||||
|
||||
|
||||
def euclidean_similarity(x, y, variance=1.0):
|
||||
distances = euclidean_distance(x, y)
|
||||
similarities = gaussian(distances, variance)
|
||||
return similarities
|
||||
|
||||
|
||||
def cosine_similarity(x, y):
|
||||
"""Compute the cosine similarity between :math:`x` and :math:`y`.
|
||||
|
Loading…
Reference in New Issue
Block a user