比较与tf.keras.metrics.CosineSimilarity的功能差异

tf.keras.metrics.CosineSimilarity

tf.keras.metrics.CosineSimilarity(
    name='cosine_similarity', dtype=None, axis=-1
)

更多内容详见tf.keras.metrics.CosineSimilarity

mindspore.train.CosineSimilarity

mindspore.train.CosineSimilarity(similarity="cosine", reduction="none", zero_diagonal=True)

更多内容详见mindspore.train.CosineSimilarity

使用方式

MindSpore:输入为矩阵,矩阵每行可看做一条样本,返回值为相似度矩阵。若similarity="cosine",则为cosine相似度计算逻辑,与tf.keras.metrics.CosineSimilarity计算逻辑相同,若similarity="dot",则为矩阵点乘转置矩阵。reduction可设置”none”、’sum’、 ‘mean’,分别对应原始结果矩阵,求和和求平均计算。

TensorFlow:输入为预测值和真实值,通过cosine similarity = (a . b) / ||a|| ||b||进行计算,返回结果为所有数据流的cosine相似度均值。

代码示例

import tensorflow as tf
tf.enable_eager_execution()

m = tf.keras.metrics.CosineSimilarity(axis=1)
m.update_state([[1, 3, 4]], [[2, 4, 2]])
print(m.result().numpy())

# output: 0.8807048


from mindspore.train import CosineSimilarity
import numpy as np

input_data = np.array([[1, 3, 4], [2, 4, 2], [0, 1, 0]])
metric = CosineSimilarity()
metric.update(input_data)
print(metric.eval())

# output:
# [[0.         0.88070485 0.58834841]
#  [0.88070485 0.         0.81649658]
#  [0.58834841 0.81649658 0.        ]]