我一直在使用TensorFlow中矩阵乘法的介绍性示例。
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
当我打印乘积时,它显示为一个张量对象:
<tensorflow.python.framework.ops.Tensor object at 0x10470fcd0>
但是我怎么知道产品的价值呢?
下面的方法不起作用:
print product
Tensor("MatMul:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)
我知道图在会话上运行,但是没有任何方法可以检查张量对象的输出而不在会话中运行图吗?
重申其他人所说的,不运行图表是不可能检查值的。
下面是一个简单的代码片段,供寻找打印值的简单示例的人使用。代码可以在ipython notebook中执行,无需任何修改
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]]
你应该认为TensorFlow核心程序由两个独立的部分组成:
构建计算图。
运行计算图。
因此,对于下面的代码,您只需构建计算图。
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:
sess = tf.Session()
// run variables initializer
sess.run(init)
print(sess.run([product]))
不,你不能在不运行图(执行session.run())的情况下看到张量的内容。你能看到的只有:
张量的维数(但我假设对TF的操作列表计算它并不难)
用于生成张量(transpose_1:0, random_uniform:0)的操作类型。
张量中元素的类型(float32)
我没有在文档中找到这一点,但我相信变量的值(和一些常数在赋值时没有计算)。
看看这个例子:
import tensorflow as tf
from datetime import datetime
dim = 7000
第一个例子中,我刚刚启动了一个常数的随机数张量运行的时间几乎是相同的不管dim (0:00:00.003261)
startTime = datetime.now()
m1 = tf.truncated_normal([dim, dim], mean=0.0, stddev=0.02, dtype=tf.float32, seed=1)
print datetime.now() - startTime
在第二种情况中,实际计算了常数并分配了值,时间显然取决于dim (0:00:01.244642)
startTime = datetime.now()
m1 = tf.truncated_normal([dim, dim], mean=0.0, stddev=0.02, dtype=tf.float32, seed=1)
sess = tf.Session()
sess.run(m1)
print datetime.now() - startTime
你可以通过计算一些东西来让它更清楚(d = tf. matrix_行列式(m1),记住时间将以O(dim^2.8)为单位运行)
附注:我在文档中找到了解释:
张量对象是运算结果的符号句柄,
但是实际上并不保存操作输出的值。
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 notebook中执行,无需任何修改
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]]