常见问题
[TOC]
功能和兼容性
我可以使用多台计算机进行分布式训练吗?
TensorFlow 可以在 Python 3 上运行吗?
早在 2015 年 12 月份,我们发行的 0.6.0 版本就已经支持了 Python 3.3+。
建立一个 TensorFlow graph
为什么 c = tf.matmul(a, b)
不会立即执行矩阵乘法?
设备是如何命名的?
对于 CPU 来说支持的设备名字是 "/device:CPU:0"
(或者 "/cpu:0"
),第 i 个 GPU 设备则会被命名为 "/device:GPU:i"
(或者 "/gpu:i"
)。
如何在一个特定的设备上执行操作?
执行一个 TensorFlow 计算
什么是 feeding 和 placeholder?
Session.run()
和 Tensor.eval()
的区别是什么?
# 使用 `Session.run()`.
sess = tf.Session()
c = tf.constant(5.0)
print(sess.run(c))
# 使用 `Tensor.eval()`.
c = tf.constant(5.0)
with tf.Session():
print(c.eval())
在第二个例子中,sesion 表现的像一个 context manager,把它作为默认的 session 来安装,会影响整个 with
块的生命周期。这个 context manager 方法可以在一些简单的情况(例如单元测试)下让代码更简洁。如果你的代码需要处理多个 graphs 和 sessions,直接调用 Session.run()
显然会更简单一点。
Session 有生命周期吗?中间的 tensors 呢?
运行时的 graph 执行是并行的吗?
TensorFlow 运行时的并行图执行穿插着很多不同的维度:
- 单独的操作有并发的实现,它会使用的 CPU 的多个核心或者一个 GPU 的多个线程。
- 卷积神经网络
tf.Session.run
TensorFlow 支持哪些客户端语言?
TensorFlow 就是为支持多客户端语言设计的。现在,我们支持的最好的客户端语言是 Python。执行和构建 graphs 的一些实验性的接口对于 C++,Java 和 Go 也是可用的。
同时 TensorFlow 还有一个 C-based client API,它可以帮助我们创建和支持更多的客户端语言。我们也邀请了一些贡献者一起完成对新语言的支持。
支持其他各种语言(例如 C#,Julia,Ruby 和 Scala)的工作,将会由开源社区来创建和支持,这些支持都是基于 TensorFlow 维护者的提供的 C API 来构建的。
TensorFlow 可以使用我机器上的所有设备(GPUs 和 CPUs)吗?
注意:TensorFlow 仅仅使用计算性能大于 3.5 的 GPU 设备。
为什么使用一个读取器或者队列的时候 Session.run()
会挂起?
变量
什么是一个变量的生命周期?
当这些变量被并发调用时,表现如何?
Tensor shapes
在 Python 中我如何决定一个 tensor 的 shape ?
x.set_shape()
和 x = tf.reshape(x)
的区别是什么?
如何才能创建一个可变批量大小的 graph ?
当创建一个可变大小的 graph 时,最重要的事情就是不要把批处理的大小编码成一个 Python 的常量,而是要使用一个符号 Tensor
去代表它。下面的这些 tips 或许会对你有帮助:
使用
batch_size = tf.shape(input)[0]
来从一个Tensor
中获取表示批维度的input
变量,并且把它储存在一个叫batch_size
的Tensor
中。
TensorBoard
如何可视化一个 TensorFlow graph ?
向 TensorBoard 发送数据的最简单方法是什么?
给你的 TensorFlow graph 添加一些摘要的操作,并且把这些摘要写在一个日志文件中。然后使用下面的命令启动 TensorBoard:
python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory
每次我启动 TensorBoard 时,就会得到一个网络安全的弹出框!
你可以使用 --host=localhost 这个参数将 TensorBoard 运行在 localhost,而不是 '0.0.0.0'。这样就不会有安全警告了。
拓展 TensorFlow
我的数据是自定义的格式,怎样做才能让 TensorFlow 正确的读取它们呢?
对于自定义格式的数据,我们有下面 3 个主要的方式来处理。
tf.data.Dataset.from_tensor_slices
其他
TensorFlow 的代码风格是什么样的?
TensorFlow Python API 的代码风格是遵循 PEP8 的约定。*要注意的是,我们使用 CamelCase
来对类进行命名,使用 snake_case
来对函数,方法以及属性进行命名。同时我们也坚持 Google Python style guide。
TensorFlow C++ 代码风格遵循 Google C++ style guide 的约定。
(*有一个例外是:我们使用 2 个空格进行缩进,而不是 4 个。)