我一直在使用矩阵乘法的介绍性例子 TensorFlow </跨度> 。
matrix1 = tf.constant(3。,3。)matrix2 = tf.constant(2。],[2。)product = tf.matmul(matrix1,matrix2)
我什么时候
我认为你需要得到一些正确的基础知识。通过上面的示例,您已经创建了张量(多维数组)。但是对于真正工作的张量流,你必须发起“ 的 会议 强> “并运行你的” 的 手术 强> “在会话中。注意”会话“和”操作“这个词。 你需要知道使用tensorflow的4件事:
现在从你所写的内容中你已经给出了张量和操作,但你没有运行会话也没有图表。张量(图的边缘)流过图形并由操作(图形的节点)操纵。有默认图表,但您可以在会话中启动您的图表。
当您说打印时,您只能访问您定义的变量或常量的形状。
所以你可以看到你缺少的东西:
with tf.Session() as sess: print(sess.run(product)) print (product.eval())
希望能帮助到你!
虽然其他答案是正确的,在评估图表之前无法打印该值,但在评估图表之后,他们并没有谈到在图表中实际打印值的一种简单方法。
在评估图表时查看张量值的最简单方法(使用 run 要么 eval )是用的 Print 如下例所示:
run
eval
Print
# Initialize session import tensorflow as tf sess = tf.InteractiveSession() # Some tensor we want to print the value of a = tf.constant([1.0, 3.0]) # Add print operation a = tf.Print(a, [a], message="This is a: ") # Add more elements of the graph using a b = tf.add(a, a)
现在,每当我们评估整个图表时,例如运用 b.eval() ,我们得到:
b.eval()
I tensorflow/core/kernels/logging_ops.cc:79] This is a: [1 3]
请注意 tf.Print() 将改变张量名称。 如果您要打印的张量是占位符,则向其提供数据将失败,因为在进纸期间将找不到原始名称。 例如:
tf.Print()
import tensorflow as tf tens = tf.placeholder(tf.float32,[None,2],name="placeholder") print(eval("tens")) tens = tf.Print(tens,[tens, tf.shape(tens)],summarize=10,message="tens:") print(eval("tens")) res = tens + tens sess = tf.Session() sess.run(tf.global_variables_initializer()) print(sess.run(res))
输出是:
python test.py Tensor("placeholder:0", shape=(?, 2), dtype=float32) Tensor("Print:0", shape=(?, 2), dtype=float32) Traceback (most recent call last): [...] InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'placeholder' with dtype float
import tensorflow as tf sess = tf.InteractiveSession() x = [[1.,2.,1.],[1.,1.,1.]] y = tf.nn.softmax(x) matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2) print(product.eval()) tf.reset_default_graph() sess.close()
重申别人说的话,不运行图表就无法检查数值。
任何寻找打印值的简单示例的人都可以使用一个简单的代码段如下。代码可以在ipython笔记本中执行而无需任何修改
import tensorflow as tf #define a variable to hold normal random values normal_rv = tf.Variable( tf.truncated_normal([2,3],stddev = 0.1)) #initialize the variable init_op = tf.initialize_all_variables() #run the graph with tf.Session() as sess: sess.run(init_op) #execute init_op #print the random values that we sample print (sess.run(normal_rv))
输出:
[[-0.16702934 0.07173464 -0.04512421] [-0.02265321 0.06509651 -0.01419079]]
最简单的 [一个] 评估a的实际价值的方法 Tensor 对象是将它传递给 Session.run() 方法,或电话 Tensor.eval() 当你有一个默认会话(即在一个 with tf.Session(): 阻止,或见下文)。一般来说 [B] ,如果不在会话中运行某些代码,则无法打印张量值。
Tensor
Session.run()
Tensor.eval()
with tf.Session():
如果您正在尝试编程模型,并想要一种简单的方法来评估张量,那么 tf.InteractiveSession 允许您在程序开始时打开会话,然后将该会话用于所有会话 Tensor.eval() (和 Operation.run() )电话。这在交互式设置中可以更容易,例如shell或IPython笔记本,当传递一个很繁琐时 Session 到处都是对象
tf.InteractiveSession
Operation.run()
Session
这对于如此小的表达似乎很愚蠢,但Tensorflow中的一个关键思想是 延期执行 :构建一个大而复杂的表达式非常便宜,当你想要评估它时,后端(你用它连接到它) Session )能够更有效地安排其执行(例如,并行执行独立部分并使用GPU)。
[A]:要打印张量值而不将其返回到Python程序,可以使用 tf.Print() 运营商,作为 Andrzej在另一个答案中建议 。请注意,您仍然需要运行图形的一部分来查看此op的输出,该输出将打印到标准输出。如果您正在运行分布式TensorFlow, tf.Print() 将其输出打印到运行该操作的任务的标准输出。这意味着如果你使用 https://colab.research.google.com 例如,或任何其他Jupyter笔记本,那么你会 不看 的输出 tf.Print() 在笔记本上;在这种情况下参考 这个答案 如何让它打印仍然。
[B]:你 威力 能够使用实验 tf.contrib.util.constant_value() 函数来获取常量张量的值,但它不是用于一般用途,并且没有为许多运算符定义。
tf.contrib.util.constant_value()
您应该将TensorFlow Core程序视为由两个独立的部分组成:
因此,对于下面的代码,您只需构建计算图。
matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2)
您还需要要初始化TensorFlow程序中的所有变量,您必须显式调用特殊操作,如下所示:
init = tf.global_variables_initializer()
现在您构建图并初始化所有变量,下一步是评估节点,您必须在会话中运行计算图。会话封装TensorFlow运行时的控件和状态。
以下代码创建一个Session对象,然后调用其run方法运行足够的计算图来进行评估 product :
product
sess = tf.Session() // run variables initializer sess.run(init) print(sess.run([product]))
基本上,在tensorflow中,当您创建任何类型的张量时,它们被创建并存储在其中,只有在您运行tensorflow会话时才能访问它。假设你已经创建了一个恒定的张量 c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) 没有运行会话,你可以得到 - op : 一个手术。计算此张量的操作。 - value_index :一个int。生成此张量的操作终点的索引。 - dtype :一个DType。存储在此张量中的元素类型。
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
op
value_index
dtype
要获取值,您可以使用所需的张量运行会话,如下所示:
with tf.Session() as sess: print(sess.run(c)) sess.close()
输出将是这样的:
数组([[1。,2.,3], [4.,5.,6。]],dtype = float32)
直到我执行完之后,即使在阅读完所有答案之后,我也很难理解需要什么。 TensofFlow也是我的新手。
def printtest(): x = tf.constant([1.0, 3.0]) x = tf.Print(x,[x],message="Test") init = (tf.global_variables_initializer(), tf.local_variables_initializer()) b = tf.add(x, x) with tf.Session() as sess: sess.run(init) print(sess.run(b)) sess.close()
但是您仍然可能需要执行会话返回的值。
def printtest(): x = tf.constant([100.0]) x = tf.Print(x,[x],message="Test") init = (tf.global_variables_initializer(), tf.local_variables_initializer()) b = tf.add(x, x) with tf.Session() as sess: sess.run(init) c = sess.run(b) print(c) sess.close()
您可以通过启用来检查TensorObject的输出,而无需在会话中运行图形 急切的执行 。
只需添加以下两行代码: import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
就在你之后 import tensorflow 。
import tensorflow
的输出 print product 在你的例子中现在将是: tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
print product
tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
请注意,截至目前(2017年11月),您必须安装Tensorflow每晚构建以启用急切执行。可以找到预制车轮 这里 。