Это очень похоже на этот вопрос , но для Кераса и я хочу получить процент, а не просто посчитать их.
У меня сейчас есть это:
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 в заданном тензоре с потенциально неизвестными (пакетными?) Размерами во время компиляции?