Сравнение значений в пользовательской метрике Keras - PullRequest
0 голосов
/ 25 апреля 2019

Я пишу собственную метрику для проблемы двоичной классификации.Функция выполняется, но у меня есть две проблемы: - если тест всегда оценивается как true - мне не удается отобразить значение тензора для его отладки

RETURNS - это определенный одномерный массивglobaly

def total_winning(y_true, y_pred):
    sess = K.get_session()
    ze_zum = 0.0
    for i in range(len(RETURNS)):
       val = K.gather(y_pred,i)
       val2 = RETURNS[i]
       val = K.print_tensor(val, message='val = ')
       #print( str(val.eval(session=sess)))
       if (K.greater(val[0], 0.5)) is not None:
           print( "Greater")
           val3 = val2
       else:
           print( "Smaller")
           val3 = 0
       ze_zum = ze_zum + val3
   return K.variable(value=ze_zum, dtype='float64' )

Я хотел бы сохранить цикл для более сложного теста

Проблемы:

  1. Оператор "If" всегда оценивается как true (отображать больше)
  2. Я не могу отладить код, потому что не могу получить доступ к тензору "val"

Что я пытался отладить

  1. K.print_tensor, но он ничего не отображает (уровень DEBUG)
  2. Если я раскомментирую строку "print / eval", я получу следующий код ошибки:

InvalidArgumentError(см. выше для отслеживания): вы должны передать значение для тензора-заполнителя 'density_1_input' с плавающей запятой и типом dtype [?, 30] [[{{node dens_1_input}} = Placeholderdtype = DT_FLOAT, shape = [?, 30], _device= "/ job: localhost / replica: 0 / task: 0 / device: GPU: 0"]] [[{{node metrics / total_winning / embedding_lookup / _29}} = _Recvclient_terminated = false, recv_device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0", send_device = "/ job: localhost / replica: 0 / task: 0/ device: GPU: 0 ", send_device_incarnation = 1, тензор_имя =" edge_33_metrics / total_winning / embedding_lookup ", tenors_type = DT_FLOAT, _device =" / job: localhost / replica: 0 / task: 0 / device: CPU: 0 "]]

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