В 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).
Есть ли какой-нибудь общий способ получить представление моего тензора в виде строки?Как люди обычно преодолевают этот барьер, чтобы увидеть, что делает ваш код?Если я придумаю что-то более причудливое, чем поиск среднего, я хочу точно увидеть, что происходит на этапах моего расчета, чтобы убедиться, что он работает как задумано.
Спасибо!