我正在训练一个神经网络,我希望两个矩阵相似(协方差矩阵)。我幼稚的方法是基于差异使用损失,例如L1损失。但这也迫使矩阵变小,这不是我想要的。
有人在这里有个主意吗?
非常感谢!
您可以使用许多指标(欧几里得距离,余弦相似度,非负特征的Bhattacharyya相似度,Jensen-Shannon散度)。
余弦相似度似乎是一个不错的起点。您可以通过考虑维空间中的两个n x m
矩阵来实现n*m
。并且,将这两个向量与余弦相似度进行比较。
实际上,可以使用torch.flatten
和来完成torch.nn.functionnal.cosine_similarity
。或等效地带有nn.Flatten
层和nn.CosineSimilarity
。
在这里,我采取了功能路线:
>>> x = torch.rand(1, 10, 10)
>>> y = torch.rand(1, 10, 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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句