Самый простой способ [A] оценить действительное значение Tensor
объекта - передать его Session.run()
методу или вызвать, Tensor.eval()
когда у вас есть сеанс по умолчанию (т. Е. В with tf.Session():
блоке или см. Ниже). В общем случае [B] вы не можете распечатать значение тензора без выполнения некоторого кода в сеансе.
Если вы экспериментируете с моделью программирования и хотите получить простой способ оценки тензоров, то tf.InteractiveSession
вы можете открыть сеанс в начале вашей программы, а затем использовать этот сеанс для всех Tensor.eval()
(и Operation.run()
) вызовов. Это может быть проще в интерактивном режиме, например, в оболочке или записной книжке IPython, когда утомительно обходить Session
объект повсюду. Например, в блокноте Jupyter работает следующее:
with tf.Session() as sess: print(product.eval())
Это может показаться глупым для такого маленького выражения, но одна из ключевых идей в Tensorflow 1.x - это отложенное выполнение : создание большого и сложного выражения очень дешево, а когда вы хотите его оценить, - с которым вы соединяетесь Session
) может более эффективно планировать его выполнение (например, параллельное выполнение независимых частей и использование графических процессоров).
[A]: Чтобы напечатать значение тензора, не возвращая его в вашу программу Python, вы можете использовать tf.print()
оператор, как предлагает Анджей в другом ответе . Согласно официальной документации:
Чтобы оператор tf.compat.v1.Session
выполнялся , пользователи должны передать произведенный оператор методу run или использовать оператор в качестве управляющей зависимости для выполняемых операций, указав с помощью tf.compat.v1.control_dependencies([print_op]
), который выводится на стандартный вывод.
Также обратите внимание, что:
В записных книжках и колабах Jupyter tf.print
печатает на выходах ячейки записной книжки. Он не будет записывать в журналы консоли ядра ноутбука.
[B]: Вы можете использовать tf.get_static_value()
функцию для получения постоянного значения данного тензора, если его значение эффективно рассчитывается.
tf.Session()
не работает в Tensorflow 2. Вы можете использоватьtf.compat.v1.Session()
вместо этого.Хотя другие ответы верны, вы не можете напечатать значение до тех пор, пока не оцените график, но они не говорят об одном простом способе фактической печати значения внутри графика после его оценки.
Самый простой способ увидеть значение тензора при оценке графа (с помощью
run
илиeval
) - использоватьPrint
операцию, как в этом примере:Теперь, когда мы оцениваем весь граф, например, используя
b.eval()
, мы получаем:источник
a.eval()
тогда!tf.Print()
это устарело и (сейчас) удалено. Вместо этого используйтеtf.print()
. См. Документы: tenorflow.org/api_docs/python/tf/Print и tenorflow.org/api_docs/python/tf/print .Повторяя то, что говорили другие, невозможно проверить значения без запуска графика.
Простой фрагмент кода для тех, кто ищет простой пример для печати значений, приведен ниже. Код может быть выполнен без каких-либо изменений в ноутбуке ipython
Вывод:
источник
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
Нет, вы не можете увидеть содержимое тензора без запуска графика (делать
session.run()
). Единственное, что вы можете увидеть:transpose_1:0
,random_uniform:0
)float32
)Я не нашел этого в документации, но я считаю, что значения переменных (и некоторые из констант не рассчитываются во время присваивания).
Посмотрите на этот пример:
Первый пример, где я просто запускаю постоянный тензор случайных чисел, запускается примерно в одно и то же время независимо от dim (
0:00:00.003261
)Во втором случае, когда константа действительно вычисляется и присваиваются значения, время явно зависит от dim (
0:00:01.244642
)И вы можете сделать это более ясным, вычисляя что-то (
d = tf.matrix_determinant(m1)
имея в виду, что время будет идтиO(dim^2.8)
)PS Я нашел, это было объяснено в документации :
источник
Я думаю, вам нужно правильно разобраться в некоторых основах. В приведенных выше примерах вы создали тензоры (многомерный массив). Но чтобы тензорный поток действительно работал, вы должны инициировать « сеанс » и запустить « операцию » в сеансе. Обратите внимание на слова «сессия» и «операция». Вам нужно знать 4 вещи для работы с tenorflow:
Теперь из того, что вы написали, вы дали тензор и операцию, но у вас нет ни сеанса, ни графика. Тензор (ребра графа) проходят через графы и управляются операциями (узлами графа). Есть график по умолчанию, но вы можете инициировать свой в сеансе.
Когда вы говорите «печать», вы получаете доступ только к форме определенной вами переменной или константы.
Таким образом, вы можете увидеть, что вам не хватает:
Надеюсь, поможет!
источник
В
Tensorflow 1.x
В Tensorflow 2.x режим ожидания включен по умолчанию. поэтому следующий код работает с TF2.0.
источник
Основываясь на ответах выше, вы можете распечатать продукт следующим образом:
источник
В Tensorflow 2.0+ (или в среде режима Eager) вы можете вызвать
.numpy()
метод:источник
tf.print(product)
также дает мне тот же вывод, что иprint(product.numpy())
с TF 2.0.tf.keras.backend.eval
полезно для оценки небольших выражений.TF 1.x и TF 2.0 совместимы.
Минимальный проверяемый пример
Это полезно, потому что вам не нужно явно создавать
Session
илиInteractiveSession
.источник
Вы можете проверить вывод TensorObject, не запуская график в сеансе, включив активное выполнение .
Просто добавьте следующие две строки кода:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
сразу после тебя
import tensorflow
.Вывод
print product
в вашем примере теперь будет:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Обратите внимание, что на данный момент (ноябрь 2017 года) вам необходимо установить ночную сборку Tensorflow, чтобы обеспечить активное выполнение. Готовые колеса можно найти здесь .
источник
Обратите внимание, что
tf.Print()
изменится название тензора. Если тензор, который вы хотите напечатать, является заполнителем, то загрузка данных ему не удастся, поскольку во время подачи не будет найдено оригинальное имя. Например:Выход:
источник
Вы должны думать о программах TensorFlow Core как о двух отдельных разделах:
Поэтому для приведенного ниже кода вы просто строите вычислительный граф.
Вам также необходимо инициализировать все переменные в программе TensorFlow, вы должны явно вызвать специальную операцию следующим образом:
Теперь вы строите график и инициализируете все переменные, следующим шагом является оценка узлов, вы должны запустить вычислительный граф в течение сеанса. Сеанс инкапсулирует управление и состояние среды выполнения TensorFlow.
Следующий код создает объект Session, а затем вызывает его метод run для запуска достаточного количества вычислительного графа для оценки
product
:источник
Вы можете использовать Keras, однострочный ответ будет использовать
eval
метод следующим образом:источник
Попробуйте этот простой код! (это говорит само за себя)
источник
Мне было нелегко понять, что требуется, даже после прочтения всех ответов, пока я не выполнил это. TensofFlow для меня тоже новый.
Но все же вам может понадобиться значение, возвращаемое при выполнении сеанса.
источник
По сути, в тензорном потоке, когда вы создаете тензор любого рода, они создаются и хранятся внутри, к которым можно получить доступ только при запуске сеанса тензорного потока. Допустим, вы создали постоянный тензор.
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Не запуская сеанс, вы можете получить :
-
op
Операцию. Операция, которая вычисляет этот тензор.-
value_index
Int. Индекс конечной точки операции, которая производит этот тензор.-
dtype
: DType. Тип элементов хранится в этом тензоре.Чтобы получить значения, вы можете запустить сеанс с нужным вам тензором:
Вывод будет примерно таким:
источник
Включите активное выполнение, которое представлено в tenorflow после версии 1.10. Это очень просто в использовании.
источник
Используя советы, представленные в https://www.tensorflow.org/api_docs/python/tf/print, я использую
log_d
функцию для печати форматированных строк.источник
источник
Теперь tf.Print устарела, вот как вместо этого использовать tf.print (строчная p).
Хотя запуск сеанса является хорошим вариантом, это не всегда правильный путь. Например, вы можете напечатать тензор в конкретном сеансе.
Новый метод печати возвращает операцию печати, у которой нет выходных тензоров:
Поскольку он не имеет выходных данных, вы не можете вставить его в график так же, как вы могли бы использовать tf.Print. Вместо этого вы можете добавить его для управления зависимостями в сеансе, чтобы сделать его печатным.
Иногда в большом графике, который может быть создан частично в подфункциях, неудобно распространять print_op на вызов сеанса. Затем tf.tuple можно использовать для связывания операции печати с другой операцией, которая затем будет выполняться с этой операцией в зависимости от того, какой сеанс выполняет код. Вот как это делается:
источник
Вопрос: Как напечатать значение объекта Tensor в TensorFlow?
Ответ:
источник