微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何引入损失以获得相似的两个矩阵

如何解决如何引入损失以获得相似的两个矩阵

我正在训练一个神经网络,我希望两个矩阵相似(协方差矩阵)。我天真的方法是根据差异使用损失,例如 L1 损失。但这也迫使矩阵变小,这不是我想要的。

这里有人有想法吗?

非常感谢!

解决方法

您可以使用许多指标(欧几里德距离、余弦相似度、非负特征的 Bhattacharyya 相似度、Jensen-Shannon 散度)。

余弦相似度似乎是一个很好的起点。您可以通过考虑 n x m 维空间中的两个 n*m 矩阵来实现这一点。并且,比较这两个向量的余弦相似度。

实际上,这可以使用 torch.flattentorch.nn.functionnal.cosine_similarity 来完成。或者等效地使用 nn.Flatten 层和 nn.CosineSimilarity

这里我采用了功能路线:

>>> x = torch.rand(1,10,10)
>>> y = torch.rand(1,10)

>>> F.cosine_similarity(torch.flatten(x,1),torch.flatten(y,1))
tensor([0.6220])

请注意,您将需要一个额外的批次维度:axis=0


编辑 - 如果您不使用批处理,您可以简单地将两个张量广播到一维张量:

>>> F.cosine_similarity(x.reshape(1,-1),y.reshape(1,-1))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。