Как получить процент значений "bool" в тензоре Кераса - PullRequest
0 голосов
/ 11 июля 2019

Это очень похоже на этот вопрос , но для Кераса и я хочу получить процент, а не просто посчитать их.

У меня сейчас есть это:

def get_success_percentage(bool_successes):
    # bool_successes is a tensor of bools (embeddings and distances and alpha are defined elsewhere)
    bool_successes = K.greater_equal(negative_distance - K.ones_like(embeddings) * alpha, positive_distance)
    dtype_successes = K.cast(bool_successes, embeddings.dtype)
    sum_successes = K.cumsum(dtype_successes)
    number_of_possible_successes = K.count_params(dtype_successes)
    percentage_successes = sum_successes / number_of_possible_successes

Я специально пытаюсь запустить это внутри метрики. Из-за этого, похоже, что первое измерение в пакете может быть Нет, поэтому я получаю ошибку

TypeError: неподдерживаемые типы операндов для *: 'NoneType' и 'int'

в строке, где я вычисляю K.count_params(dtype_successes). (Эта ошибка похожа на this , но решения там, похоже, не помогают.)

Я также понял, что сглаживание может избавить от ошибки. Поэтому я изменил назначение dtype_successes на dtype_successes = K.flatten(K.cast(bool_successes, embeddings.dtype)). Это исправляет ошибку, но я получаю новую ошибку

ValueError: ни одно из значений не поддерживается.

на линии percentage_successes = sum_successes / number_of_possible_successes.

Так что там по-прежнему скрыто значение None.

Итак, как в метрике я могу вычислить процентное значение bools в заданном тензоре с потенциально неизвестными (пакетными?) Размерами во время компиляции?

...