最小化两个张量的余弦相似度并输出一个标量。火炬

埃桑·雅古比

我使用Pytorch余弦相似度函数如下。我有两个特征向量,我的目标是让它们彼此不同。所以,我想我可以最小化它们的余弦相似度。我对我的编码方式有些怀疑。感谢您对以下问题的建议。

  1. 我不知道为什么这里有一些负值val1

  2. 我已经完成了三个步骤来转换val1为标量。我是否以正确的方式做这件事?有没有其他办法?

  3. 为了最小化相似性,我使用了1/var1. 这是执行此操作的标准方法吗?如果我使用它是否正确1-var1

    def loss_func(feat1, feat2):
         cosine_loss = torch.nn.CosineSimilarity(dim=1, eps=1e-6)
         val1 = cosine_loss(feat1, feat2).tolist()
         # 1. calculate the absolute values of each element,
         # 2. sum all values together,
         # 3. divide it by the number of values
         val1 = 1/(sum(list(map(abs, val1)))/int(len(val1)))
         val1 = torch.tensor(val1, device='cuda', requires_grad=True)
         return val1 
    
约达格

不要将您的损失函数转换为列表。这会破坏 autograd,因此您将无法使用 pytorch 优化模型参数。

损失函数已经是需要最小化的东西。如果您想最小化相似度,那么您可能只想返回平均余弦相似度。相反,如果您想最小化相似度的大小(即鼓励特征正交),那么您可以返回余弦相似度的平均绝对值。

似乎您实施的内容将尝试最大化相似性。但这似乎与您所说的不符。此外,要将最小化问题转化为等效的最大化问题,您通常只需否定该度量。负损失值没有错。采用严格的正度量的倒数确实将其从最小化问题转换为最大化问题,但也会改变度量的行为,并且可能不是您想要的。

根据您的实际需求,其中之一可能会满足您的需求

import torch.nn.functional as F

def loss_func(feat1, feat2):
    # minimize average magnitude of cosine similarity
    return F.cosine_similarity(feat1, feat2).abs().mean()

def loss_func(feat1, feat2):
    # minimize average cosine similarity
    return F.cosine_similarity(feat1, feat2).mean()

def loss_func(feat1, feat2):
    # maximize average magnitude of cosine similarity
    return -F.cosine_similarity(feat1, feat2).abs().mean()

def loss_func(feat1, feat2):
    # maximize average cosine similarity
    return -F.cosine_similarity(feat1, feat2).mean()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算两个张量之间的余弦相似度?

如何编写一个返回两个文档之间余弦相似度的方法

计算Keras中两个张量之间的余弦相似度

计算 lambda 层中两个张量向量之间的余弦相似度?

如何计算两个向量的余弦相似度?

两个大文件的平行余弦相似度

计算R中两个单词的余弦相似度?

列表中两个词之间的余弦相似度

合并两个 CountVectorizers 并计算余弦相似度

用两个变量最小化一个函数

如何找到一个向量与矩阵的余弦相似度

两个张量的火炬广播产品

最小化张量流中的两个变量函数

Python:两个大型numpy数组之间的余弦相似度

我有两个公式计算“余弦相似度”,有什么区别?

如何计算PySpark中两个向量的余弦相似度?

如何调试这段代码计算两个unicode文件的余弦相似度?

查找两个火炬张量的不相交

两个n维火炬张量的不相交

编写一个 R 函数来查找余弦相似度

特殊向量的余弦相似度(只有一个分量)

通过两个比较函数同时对一个列表进行排序的算法,从而使不和谐对最小化?

除非最小化第二个窗体,否则将两个窗体一起移动

计算两个相同形状矩阵的行之间的余弦相似度的最快方法是什么

最小化一个Webpack块

最小化Tensorflow中一个变量的功能

使用 scipy 最小化并限制一个参数

查找两个矩阵之间的最小余弦距离

从tensorflow中的两个现有张量构造一个新的张量