Я пишу собственную метрику для проблемы двоичной классификации.Функция выполняется, но у меня есть две проблемы: - если тест всегда оценивается как 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' )
Я хотел бы сохранить цикл для более сложного теста
Проблемы:
- Оператор "If" всегда оценивается как true (отображать больше)
- Я не могу отладить код, потому что не могу получить доступ к тензору "val"
Что я пытался отладить
- K.print_tensor, но он ничего не отображает (уровень DEBUG)
- Если я раскомментирую строку "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 "]]