我正在尝试在Swift中为Tensorflow创建余弦相似度图层,以创建单词嵌入。
我试图根据Wikipedia的定义通过张量函数实现它。
@differentiable
func cosineSimilarity(_ input: Tensor<Float>) -> Tensor<Float> {
// https://en.wikipedia.org/wiki/Cosine_similarity
let numerator = input.product(squeezingAxes: 1).sum(squeezingAxes: 1)
let denominator = sqrt(input.squared().sum(squeezingAxes: 1)).product(squeezingAxes: 1)
return numerator / denominator
}
但这会导致编译错误:
error: expression is not differentiable
let denominator = sqrt(input.squared().sum(squeezingAxes: 1)).product(squeezingAxes: 1)
具有
product
功能。因为乘积只是乘法的总和,所以我希望它能起作用。如果我尝试在for循环中手动创建产品,那么它可以工作,但是速度很慢。 最佳答案
因此,在Tensorflow中,Swift并未实现产品差异化。具有实现的提取请求当前在https://github.com/tensorflow/swift-apis/pull/550处打开。
关于swift - 张量在Tensorflow中的可积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58725888/