Прежде всего, я использую TensorFlow 2.0, и я забочусь только об этой версии или выше (и я уже забочусь о таком программном обеспечении, которое вызывает только головные боли).
* Документация TensorFlow из tf.print
говорит
Распечатать указанные входные данные.
, а затем
Оператор TensorFlow, который печатает указанные входы для желаемого выходного потока или уровня регистрации. Входными данными могут быть
- плотные или
- разреженные тензоры ,
- примитивные python объекты ,
- структуры данных, содержащие тензоры и
- для печати Python объекты .
Печатные тензоры будут рекурсивно показывать первый и последний элементы каждого измерения для суммирования.
Это все очень хорошо, но я до сих пор не понимаю, где tf.print
будет РАБОТАТЬ (т.е. печатать ЗНАЧЕНИЯ переменных и тензоров) в моем коде. Конечно, само собой разумеется, мне было наплевать на символическое представление c тензоров, переменных или чего-либо еще. Всякий раз, когда я пытаюсь использовать tf.print
, я хочу видеть ЗНАЧЕНИЯ (действительные числа, векторы или матрицы).
Я пытался использовать tf.print
в нескольких случаях и в нескольких местах, например,
в методе, который вызывается из метода __init__
пользовательский слой, который вызывается во время построения модели (то есть перед компиляцией модели), чтобы напечатать значение тензора (по крайней мере, это то, что возвращает type(my_var)
, то есть возвращает <class 'tensorflow.python.framework.ops.Tensor'>
), но ничего не печатается. Если я попытаюсь добавить @tf.function
(я все еще не использую эту функцию!), Ничего не изменится. Согласно документации выше, tf.print
должен печатать тензоры, моя переменная - тензор, и TensorFlow решает игнорировать мой вызов, и тогда возникает вопрос, почему я решил использовать TF? Почему?
Кроме того, я использую TF 2.0 и, даже если я не использую декоратор, @tf.function
, print(tf.executing_eagerly())
печатает False, что на самом деле и ожидалось.
в пользовательской функции потерь, где происходит похожее поведение (т.е. иногда что-то печатается, иногда нет, иногда я пытаюсь добавить декоратор @tf.function
к пользовательской функции потерь и вижу, что-то меняется, но ничего изменения, или, может быть, да).
Хорошо, так что, как вы можете видеть, я понятия не имею, где tf.print
будет делать то, что я хочу, т.е. я хочу видеть значения тензоры. Если что-то является тензорным, оно должно иметь значение. Аналогично для переменных.
Итак, когда tf.print
фактически напечатает значения тензоров?
Я ищу ответы, которые говорят, например, «tf.print
НИКОГДА не сработает» или «Это сработает, только если вы мечтаете». Помимо шуток и сарказма, я действительно ищу ответы, которые точно скажут мне, в каких местах моего кода или на каких этапах разработки модели с TF tf.print
будет действительно то, что она должна делать. Пожалуйста, не говорите мне, что tf.print
будет работать, когда вход является тензором !!