Пользовательская функция потерь Keras не печатает значение тензора

Я пишу простую функцию потерь, в которой мне нужно преобразовать тензор в массив numpy (это важно). Я просто пытаюсь вывести значение тензора, но получаю эту ошибку: -

Тензор ("потеря / активация_4_потеря / Печать: 0", shape = (?, 224, 224, 2), dtype = float32)

def Lc(y_true, y_pred):
    x=K.print_tensor(y_pred)
    print(x)
    return K.mean(y_pred)

Пожалуйста, скажите мне, как я могу получить значение (числовое значение) из тензора? Я также пробовал "eval", но он также выдавал большую жирную ошибку о том, что сеанса нет, это заполнитель и т. Д. Вся программа выполняется нормально, только строка "print_tensor" вызывает проблему.


person Asim    schedule 06.03.2019    source источник
comment
K.print_tensor(), кажется, возвращает объект Print Tensor. Просто выполните основные действия: print( tf.Session().run(x) )   -  person Shubham Panchal    schedule 06.03.2019
comment
Кроме того, при необходимости вы можете включить активный режим в TensorFlow, чтобы значения тензоров выводились на печать.   -  person Shubham Panchal    schedule 06.03.2019
comment
Ваша посылка неверна, никакая функция потерь в Keras не будет работать, если вы используете numpy как ее часть, потому что нет способа распространять градиенты через код numpy.   -  person Dr. Snoopy    schedule 06.03.2019
comment
@ShubhamPanchal Я получаю сообщение об ошибке, что вы должны передать значение при выполнении tf.session (). Run (x) в пользовательской потере keras.   -  person Asim    schedule 06.03.2019


Ответы (1)


Оператор печати является избыточным. print_tensor уже распечатает значения.

Из документации print_tensor:

«Обратите внимание, что print_tensor возвращает новый тензор, идентичный x , который следует использовать в следующем коде. В противном случае операция печати не принимается во внимание при оценке».

В приведенном выше коде, поскольку y_pred был присвоен x, а x больше не использовался, печать не удалась.

Используйте версию ниже.

def Lc(y_true, y_pred):
    y_pred=K.print_tensor(y_pred)
    return K.mean(y_pred)

def cat_loss(y_true, y_pred):
    y_pred = K.print_tensor(y_pred)
    return K.categorical_crossentropy(y_true, y_pred)

После того, как я поместил эту функцию cat_loss в свой цикл обучения, я могу увидеть следующий результат:

[[0.000191014129 0.230871275 0.43813318]...]

190/255 [=====================> ........] - Расчетное время прибытия: 0 с - потеря: 0,3442 - в соответствии с: 0,9015

[[3.16367514e-05 1.70419597e-07 0.000147014405]...]

person Manoj Mohan    schedule 06.03.2019