在 Keras 中计算向量和矩阵之间的余弦相似度
Computing cosine similarity between vector and matrix in Keras
我有一个向量作为图层的输入。
对于这个向量,我想计算与其他几个向量相似的余弦(可以排列在矩阵中)
示例(其他向量: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, ...))
但不幸的是我不知道如何在 keras 层中使用 input_shape(1,len(v)) 和 output_shape(1,columns(matrix))
好的,现在很容易。我只是插入了这个 lambda 层
因为 mean 函数也适用于向量 - 矩阵乘法。
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,) 的向量。输出是一个向量,其输入向量与 c1 和 c2 的余弦相似度值的形状为 (2,)
我有一个向量作为图层的输入。 对于这个向量,我想计算与其他几个向量相似的余弦(可以排列在矩阵中)
示例(其他向量: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, ...))
但不幸的是我不知道如何在 keras 层中使用 input_shape(1,len(v)) 和 output_shape(1,columns(matrix))
好的,现在很容易。我只是插入了这个 lambda 层
因为 mean 函数也适用于向量 - 矩阵乘法。
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,) 的向量。输出是一个向量,其输入向量与 c1 和 c2 的余弦相似度值的形状为 (2,)