Дифференцируемое произведение тензора в тензорном потоке - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать слой сходства косинусов в 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)

С функцией highlihted product. Поскольку продукт - просто сумма умножения, я ожидал, что это сработает. Если я пытаюсь создавать продукты вручную, для циклов, это работает, но это очень медленно.

1 Ответ

0 голосов
/ 10 ноября 2019

Таким образом, дифференциация продукта просто не была реализована в Swift для Tensorflow. Запрос Pull с реализацией в данный момент открыт на https://github.com/tensorflow/swift-apis/pull/550.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...