Tensorflow中张量的微分积
Differentiable product of tensor in Tensorflow
我正尝试在 Swift 中为 Tensorflow 创建余弦相似度层,以创建词嵌入。
我尝试根据维基百科上的定义通过张量函数来实现它。
@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 创建余弦相似度层,以创建词嵌入。
我尝试根据维基百科上的定义通过张量函数来实现它。
@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.
打开