TensorFlow: пример целых чисел от Gumbel Softmax - PullRequest
0 голосов
/ 07 марта 2019

Я реализую программу для выборки целых чисел из категориального распределения, где каждое целое число связано с вероятностью.Мне нужно убедиться, что эта программа дифференцируема, чтобы можно было применить обратное распространение.Я обнаружил tf.contrib.distributions.RelaxedOneHotCategorical, что очень близко к тому, чего я пытаюсь достичь.

Однако метод sample этого класса возвращает однозначный вектор вместо целого числа.Как написать программу, которая является дифференцируемой и возвращает целое число / скаляр вместо вектора?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вы можете сделать скалярное произведение ослабленного горячего вектора с вектором [1 2 3 4 ... n]. Результат даст вам желаемый скаляр.

Например, если ваш единственный горячий вектор равен [0 0 0 1], то dot([0 0 0 1],[1 2 3 4]) даст вам 4, то, что вы ищете.

0 голосов
/ 08 марта 2019

Причина того, что RelaxedOneHotCategorical действительно дифференцируема, связана с тем, что он возвращает вектор softmax с плавающей точкой вместо индекса argmax int. Если все, что вам нужно, это индекс максимального элемента, вы также можете использовать Категориальный.

...