常见问题

关于 TensorFlow

[TOC]

功能和兼容性

我可以使用多台计算机进行分布式训练吗?

分布式 TensorFlow

TensorFlow 可以在 Python 3 上运行吗?

早在 2015 年 12 月份,我们发行的 0.6.0 版本就已经支持了 Python 3.3+。

建立一个 TensorFlow graph

Building Graphs

为什么 c = tf.matmul(a, b) 不会立即执行矩阵乘法?

tf.Session

设备是如何命名的?

对于 CPU 来说支持的设备名字是 "/device:CPU:0"(或者 "/cpu:0"),第 i 个 GPU 设备则会被命名为 "/device:GPU:i"(或者 "/gpu:i")。

如何在一个特定的设备上执行操作?

卷积神经网络

执行一个 TensorFlow 计算

Running Graphs

什么是 feeding 和 placeholder?

tf.Tensor

Session.run()Tensor.eval() 的区别是什么?

tf.get_default_session

# 使用 `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 呢?

tf.Session.close

Running Graphs

运行时的 graph 执行是并行的吗?

TensorFlow 运行时的并行图执行穿插着很多不同的维度:

TensorFlow 支持哪些客户端语言?

TensorFlow 就是为支持多客户端语言设计的。现在,我们支持的最好的客户端语言是 Python。执行和构建 graphs 的一些实验性的接口对于 C++JavaGo 也是可用的。

同时 TensorFlow 还有一个 C-based client API,它可以帮助我们创建和支持更多的客户端语言。我们也邀请了一些贡献者一起完成对新语言的支持。

支持其他各种语言(例如 C#JuliaRubyScala)的工作,将会由开源社区来创建和支持,这些支持都是基于 TensorFlow 维护者的提供的 C API 来构建的。

TensorFlow 可以使用我机器上的所有设备(GPUs 和 CPUs)吗?

卷积神经网络

注意:TensorFlow 仅仅使用计算性能大于 3.5 的 GPU 设备。

为什么使用一个读取器或者队列的时候 Session.run() 会挂起?

Reading data

变量

Variables

什么是一个变量的生命周期?

tf.Session.close

当这些变量被并发调用时,表现如何?

tf.Variable.assign

Tensor shapes

tf.TensorShape

在 Python 中我如何决定一个 tensor 的 shape ?

tf.shape

x.set_shape()x = tf.reshape(x) 的区别是什么?

tf.Tensor.set_shape

tf.reshape

如何才能创建一个可变批量大小的 graph ?

tf.import_graph_def

当创建一个可变大小的 graph 时,最重要的事情就是不要把批处理的大小编码成一个 Python 的常量,而是要使用一个符号 Tensor 去代表它。下面的这些 tips 或许会对你有帮助:

TensorBoard

如何可视化一个 TensorFlow graph ?

TensorBoard: 图形可视化

向 TensorBoard 发送数据的最简单方法是什么?

给你的 TensorFlow graph 添加一些摘要的操作,并且把这些摘要写在一个日志文件中。然后使用下面的命令启动 TensorBoard:

python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory

Tensorboard:可视化学习面板

每次我启动 TensorBoard 时,就会得到一个网络安全的弹出框!

你可以使用 --host=localhost 这个参数将 TensorBoard 运行在 localhost,而不是 '0.0.0.0'。这样就不会有安全警告了。

拓展 TensorFlow

添加一个新操作(Op)

我的数据是自定义的格式,怎样做才能让 TensorFlow 正确的读取它们呢?

对于自定义格式的数据,我们有下面 3 个主要的方式来处理。

tf.data.Dataset.from_tensor_slices

tf.image.decode_png

tf.python_io.TFRecordWriter

读取自定义文件和记录格式

其他

TensorFlow 的代码风格是什么样的?

TensorFlow Python API 的代码风格是遵循 PEP8 的约定。*要注意的是,我们使用 CamelCase 来对类进行命名,使用 snake_case 来对函数,方法以及属性进行命名。同时我们也坚持 Google Python style guide

TensorFlow C++ 代码风格遵循 Google C++ style guide 的约定。

(*有一个例外是:我们使用 2 个空格进行缩进,而不是 4 个。)