在Keras中计算向量和矩阵之间的余弦相似度

时间:2019-04-04 21:52:24

标签: tensorflow keras cosine-similarity

我有一个向量作为图层的输入。 对于这个矢量,我想计算出与其他几个矢量(可以排列成矩阵)的余弦相似度

示例(其他向量:c1,c2,c3 ...):

Input: 
v 
(len(v) = len(c1) = len(c2) ...)

Output: 
[cosinsSimilarity(v,c1),cosineSimilarity(v,c2),cosineSimilarity(v,c3),consinSimilarity(v,...)]

我认为可以通过以下方法解决该问题:

cosineSimilarity (v, matrix (c1, c2, c3, ...))

但是不幸的是,我不知道如何在具有input_shape(1,len(v))和output_shape(1,columns(matrix))的keras层中实现这一点

1 个答案:

答案 0 :(得分:0)

好吧,现在是如此简单。我只是插入了这个lambda层
因为均值函数也适用于向量-矩阵乘法。

def cosine_similarity(x):
  #shape x: (10,)
  y = tf.constant([c1,c2])
  #shape c1,c2: (10,)
  #shape y: (2,10)

  x = K.l2_normalize(x, -1)
  y = K.l2_normalize(y, -1)
  s = K.mean(x * y, axis=-1, keepdims=False) * 10
  return s
在我的情况下,

输入是形状为(10,)的向量。输出是一个向量,形状为(2,)的输入向量与c1和c2的余弦相似度值