Печать внутри функции потери пользовательских ноутбука Jupyter с Keras / TF - PullRequest
0 голосов
/ 02 июня 2018

В Keras, если вы выполняете пользовательскую функцию потерь в записной книжке Jupyter, вы ничего не сможете распечатать.Например, если у вас есть:

def loss_func(true_label, NN_output):
        true_cat = true_label[:,0]
        pred_cat = NN_output[:,0]
        indicator = NN_output[:,1]
        print("Hi!")
        custom_term = K.mean(K.abs(indicator))
        return binary_crossentropy(true_cat, pred_cat) + custom_term

При оценке функции ничего не будет напечатано.

В качестве обходного пути, если я выполняю некоторую отладку, я обнаружил, что могу написать вфайл в функции стоимости, который может быть полезен, если я хочу напечатать что-то стандартное, например, int или строку.

Однако попытка записать в файл тензор типа indicator дает невероятно полезный вывод:

Tensor("loss_103/model_105_loss/Print:0", shape=(512,), dtype=float32)

Я знаю, что TF предоставляет tf.Print() метод для вывода значения тензора, но я не понимаю, как это работает с Jupyter.В других ответах говорилось, что tf.Print() пишет в стдerr, что означает, что попытка

sys.stderr = open('test.txt', 'w')

теоретически должна позволить мне получить вывод из файла, но, к сожалению, это не работает (по крайней мере, в Jupyter).

Есть ли какой-нибудь общий способ получить представление моего тензора в виде строки?Как люди обычно преодолевают этот барьер, чтобы увидеть, что делает ваш код?Если я придумаю что-то более причудливое, чем поиск среднего, я хочу точно увидеть, что происходит на этапах моего расчета, чтобы убедиться, что он работает как задумано.

Спасибо!

1 Ответ

0 голосов
/ 20 мая 2019

Вы можете сделать что-то вроде следующего кода:

def loss_func(true_label, NN_output):
    true_cat = true_label[:,0]
    true_cat = tf.Print(true_cat, [true_cat], message="true_cat: ") # added line
    pred_cat = NN_output[:,0]
    pred_cat = tf.Print(pred_cat, [pred_cat], message="pred_cat: ") # added line
    indicator = NN_output[:,1]
    custom_term = K.mean(K.abs(indicator))
    return binary_crossentropy(true_cat, pred_cat) + custom_term

В основном я добавил две строки для вывода значений true_cat, pred_cat.Чтобы что-то напечатать, вы должны включить оператор print в график tf с помощью приведенных выше операторов.
Однако уловка заключается в том, что он собирается печатать на консоли ноутбука jupyter , где вы работаете с ноутбуком не на ноутбуке ipython .

Ссылки:

Как напечатать значение объекта Tensor в TensorFlow?

Печать потерь во время обучения TensorFlow

https://www.tensorflow.org/api_docs/python/tf/Print

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