发新帖

TensorFlow 学习 -- 低级别 API - 张量 (3)

[复制链接]
502 0

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
转载自: https://tensorflow.google.cn/programmers_guide/tensors?hl=zh-CN


数据类型
除维度外,张量还有数据类型。请参阅《编程人员指南》中的 tf.DataType 页面,以获取数据类型的完整列表。
一个 tf.Tensor 只可能有一种数据类型。但是,可以将任意数据结构序列化为 string 并将其存储在 tf.Tensor 中。
可以通过 tf.cast 来将 tf.Tensor 从一个数据类型转换到另一种:

# Cast a constant integer tensor into floating point.
float_tensor = tf.cast(tf.constant([1, 2, 3]), dtype=tf.float32)
要检查 tf.Tensor 的数据类型,请使用 Tensor.dtype 属性。
创建来自 Python 目标的 tf.Tensor 时,可以选择指定数据类型。如果不指定数据类型,TensorFlow 会选择一个可以表示数据的数据类型。TensorFlow 将 Python 整数转换为 tf.int32,并将 Python 浮点数转换为 tf.float32。此外,TensorFlow 使用 Numpy 在转换至数组时使用的相同规则。


评估张量
一旦计算图建立完毕,就可以运行生成特定 tf.Tensor 的计算并提取分配给它的值。这对于程序调试很有帮助,也是 TensorFlow 的大部分功能可用所必需的。
评估张量最简单的方法是使用 Tensor.eval 方法。例如:

constant = tf.constant([1, 2, 3])
tensor = constant * constant
print tensor.eval()
eval 方法仅在默认 tf.Session 值处于活动状态时才起作用(请参阅《图和会话》获取更多信息)。
Tensor.eval 会返回一个与张量内容相同的 Numpy 数组。
有时不可能在没有背景的情况下评估 tf.Tensor,因为它的值可能取决于无法获取的动态信息。例如,在没有提供 placeholder 值的情况下,无法评估依赖于 placeholder 的张量。

p = tf.placeholder(tf.float32)
t = p + 1.0
t.eval()  # This will fail, since the placeholder did not get a value.
t.eval(feed_dict={p:2.0})  # This will succeed because we're feeding a value
                           # to the placeholder.
请注意,可以给任何 tf.Tensor 赋值,而不仅仅是占位符。
其他模型构造可能会使评估 tf.Tensor 变得较为复杂。TensorFlow 无法直接评估函数内部或控制流结构内部定义的 tf.Tensor。如果 tf.Tensor 取决于队列中的值,那么只有在某些东西加入队列后才能评估 tf.Tensor;否则,评估将被搁置。在处理队列时,请先调用 tf.train.start_queue_runners,再评估 tf.Tensor。


打印张量
出于调试目的,可能需要打印 tf.Tensor 值。 提供高级调试支持,而 TensorFlow 也有一个指令可以直接打印 tf.Tensor 的值。
请注意,打印 tf.Tensor 时很少使用以下模式:

t = <<some tensorflow operation>>
print t  # This will print the symbolic tensor when the graph is being built.
         # This tensor does not have a value in this context.
使用该代码会打印 tf.Tensor 目标(表示延迟计算),而不是其值。相反,TensorFlow 提供 tf.Print 指令,该指令返回其第一个张量参数,参数保持不变,同时打印传递的 tf.Tensor 作为第二个参数。
要正确使用 tf.Print,则必须使用其返回的值。请参阅下文的示例:

t = <<some tensorflow operation>>
tf.Print(t, [t])  # This does nothing
t = tf.Print(t, [t])  # Here we are using the value returned by tf.Print
result = t + 1  # Now when result is evaluated the value of `t` will be printed.
在评估 result 时,会评估所有影响 result 的元素。由于 result 依靠 t,而评估 t 会导致打印其输入(t 的旧值),所以 t 会被打印。

本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表