当前位置:   article > 正文

使用Keras计算余弦相似度(Cosine Similarity)_keras余弦相似度

keras余弦相似度

因为Merge函数在Keras新版本中已经不再使用了,在计算批次余弦相似度时,需要自定义函数。余弦相似度定义如下:

要计算两个向量相似度有如下步骤:

  1. 分别计算两个向量l2范式,计算两个向量的点乘
  2. 点乘的结果除以l2范式的乘积,注意分母不要为0

我们使用Keras后端函数计算Cosine相似度,因为在使用后端函数时候要使用Lamda函数进行包裹,否则程序会影响出错。K.batch_dot()函数批量计算向量点乘, K.maximum(K.sqrt(dot2 * dot3), K.epsilon())保证分布不为0。具体计算代码如下:

  1. import keras.backend as K
  2. from keras.layers.core import Lambda
  3. class CosineLayer():
  4. def __call__(self, x1, x2):
  5. def _cosine(x):
  6. dot1 = K.batch_dot(x[0], x[1], axes=1)
  7. dot2 = K.batch_dot(x[0], x[0], axes=1)
  8. dot3 = K.batch_dot(x[1], x[1], axes=1)
  9. max_ = K.maximum(K.sqrt(dot2 * dot3), K.epsilon())
  10. return dot1 / max_
  11. output_shape = (1,)
  12. value = Lambda(
  13. _cosine,
  14. output_shape=output_shape)([x1, x2])
  15. return value
  16. # x1,x2:(batch_size, dim)
  17. # cosine = CosineLayer()
  18. # similarity = cosine(x1, x2)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/42265
推荐阅读
相关标签
  

闽ICP备14008679号