目录:

  1. 特点和兼容性(Features and Compatibility)
  2. 建立一个TensorFlow图(Building a TensorFlow graph)
  3. 运行一个TensorFlow计算图(Running a TensorFlow computation)
  4. 变量(Variables)
  5. 张量的形状(Tensor shapes)
  6. TensorBoard
  7. TensorFlow扩展(Extending TensorFlow)
  8. 其他(Miscellaneous)

特点和兼容性

1) 可以在多个计算机上分布式训练么?

可以!TensorFlow从版本0.8开始就支持分布式计算了。TensorFlow现在在一个或多个计算机上支持多个设备(CPUs或者GPUs)。

2) TensorFlow支持Python3么?

0.6.0版本后的TensorFlow,支持Python3.3+。

建立一个TensorFlow图(graph)

可以查看建立图的API文档(https://www.tensorflow.org/versions/master/api_guides/python/framework)。

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

在TensorFlow的Python API中,a,b和c都是tf.Tensor对象。一个Tensor对象是一个运算操作结果的符号句柄(a symbolic handle to the result of an operation),但是实际上并没有保存运算操作结果的值。反而,TensorFlow鼓励用户去建立一个复杂的表达式(比如整个神经网络和它的梯度)来作为一个数据流的图。然后你可以将整个数据流的图(或者其中的一个子图)给一个TensorFlow的tf.Session,它比起一个一个地执行运算操作,可以更有效地执行整个计算图。

2) 设备是怎么命名的?

对CPU设备来说,支持的设备名字是"/device:CPU:0"或"/cpu:0",对GPU来说,是"/device:GPU:i" (或者 "/gpu:i"),其中i表示第i个GPU设备。

3) 我如何将一个运算操作在指定的设备上运行?

将一组运算操作放置在指定设备上,可以将这些运算操作创建在 with tf.device(name):下。TensorFlow如何将运算操作绑定在设备的详细情况可以查看文档 using GPUs with TensorFlowCIFAR-10 tutorial 是如何使用多GPU的一个例子。

运行一个TensorFlow计算图

1) feeding和placeholder之间是怎么处理的?

Feeding是TensorFlow Session API中的一种机制,它可以允许你在运行时给一个或者多个tensor替换不同的值。tf.Session.run中feed_dict的参数一个映射tf.Tensor对象到numpy数组(或者其他一些类型)的字典,作为这些tensor每执行一步时的值。

一般地,你有某些特定的tensor,比如说输出,需要不停地提供数据。tf.placeholder操作符允许你定义一个必须被fed的tensor,其中你可以选择是否限制这些tensor的形状。可以查看 beginners' MNIST tutorial ,这是一个介绍placeholders和feeding如何为一个神经网络提供训练数据的例子。

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

如果t是一个tf.Tensor对象,tf.Tensor.evaltf.Session.run的速写方法。下面两个代码是等价的:

# Using `Session.run()`.
sess = tf.Session()
c = tf.constant(5.0)
print(sess.run(c)) # Using `Tensor.eval()`.
c = tf.constant(5.0)
with tf.Session():
print(c.eval())

在第二个例子中,session是一个上下文管理器( context manager),在with tf.Session():生命周期里面,默认的都是该session的。这个上下文管理器对一些简单的应用(如单元测试)有更简洁的代码。如果你的代码同时处理多个图(graph)和session,那么最好还是使用Session.run()来使程序变得更明确。

3) Session有生命周期么?中间过程产生的tensor呢?

Session可以拥有资源,比如说 tf.Variabletf.QueueBase,和tf.ReaderBase,这些资源占用了大量的内存空间。当session被关闭时(通过 tf.Session.close调用),这些资源(还有其对应的内存)将被释放。

作为调用Session.run()产生一部分中间tensor,会在调用该语句结束的时候或者之前被释放。

4) 运行时是否将计算图执行的部分并行化?

在多个不同的维度上,TensorFlow运行时并行化图形的执行:

(1)    
单个运算操作有并行实现,使用一个CPU的多个核心,或者一个GPU的多个线程

(2)    
在TensorFlow计算图中独立的节点可以在不同的设备上并行运行,因此可以使训练时使用多个GPU加速。可以查看这个例子: CIFAR-10 training using multiple GPUs

(3)    
Session API允许多个并行的步骤(比如并行调用 tf.Session.run)。这可以使运行时获得更高的吞吐量,如果单个步骤没有使用完你计算机上所有的资源的话。

5) TensorFlow支持什么语言调用?

TensorFlow被设计支持多种不同的语言调用。目前,Python是支持最好的语言。C++、Java和Go也支持执行和构造计算图。

TensorFlow也有一个基于C语言的API,来支持更多其他语言。

6) TensorFlow会充分利用计算机上所有可用的设备(CPU和GPU)么?

TensorFlow支持多CPU和GPU。TensorFlow如何将运算操作分配到设备上的细节可用去看文档 using GPUs with TensorFlow; CIFAR-10 tutorial是一个使用多GPU模型的例子。

注意:TensorFlow仅仅支持计算能力大于3.5的GPU设备。

7) 当使用一个reader 或者一个queue时,Session.run()为什么会暂停/终止?

tf.ReaderBase 和 tf.QueueBase两个类提供了特殊的操作,会使系统阻塞,直到可以使用输入(或者有界列队中有空余空间)。这些操作允许你建立更为精细的输出管道( input pipelines),当然另一方面会使TensorFlow计算变得更加复杂。可以查看 using QueueRunner objects to drive queues and readers 来获取更多如何使用它们的知识。

变量(Variables)

有关变量的知识可以查看 the API documentation for variables.。

1) 变量的生命周期是什么?

当你在一个会话(session)中运行tf.Variable.initializer操作时,一个变量将会被创建;当那个session被关闭时,该变量将被销毁。

2) 当变量同时被访问时,它们是怎么运作的?

变量允许并行读取和写入操作。当一个变量被并行地更新时,如果这时候读取这个变量,那么读取的值可能会改变。默认的情况下,对一个变量并行分配操作是允许在没有互斥锁的情况下运行。当操作一个变量时,为了可以对tf.Variable.assign传递use_locking=True来获取一个锁。

张量的形状(Tensor shapes)

也可以查看tf.TensorShape

1) 在Python中我们如何确定tensor的形状?

在TensorFlow中,一个tensor同时拥有一个静态(inferred)的形状和一个动态(true)的形状。静态的形状可以使用tf.Tensor.get_shape方法读取,这个读取的形状是创建tensor操作中推断出来的,可能是部分正确的。如果静态的形状没有完全被定义,那么一个Tensor类型的t的动态的形状可以使用 tf.shape(t)获得。

2) x.set_shape()和x=tf.reshape(x)之间的区别是什么?

tf.Tensor.set_shape方法更新一个Tensor对象的静态形状,这一般用于当不能被直接推断出来时,提供额外的形状信息。这个并不会改变tensor的动态形状。

_, image_data = tf.TFRecordReader(...).read(...)

image = tf.image.decode_png(image_data, channels=3)

# The height and width dimensions of `image` are data dependent, and

# cannot be computed without executing the op.

print(image.shape)

==> TensorShape([Dimension(None), Dimension(None), Dimension(3)])

# We know that each image in this dataset is 28 x 28 pixels.

image.set_shape([28, 28, 3])

print(image.shape)

==> TensorShape([Dimension(28), Dimension(28), Dimension(3)])

tf.reshape 操作创建了一个新的、动态形状不同的tensor。

# tensor 't' is [1, 2, 3, 4, 5, 6, 7, 8, 9]

# tensor 't' has shape [9]

reshape(t, [3, 3]) ==> [[1, 2, 3],

                        [4, 5, 6],

                        [7, 8, 9]]

# tensor 't' is [[[1, 1], [2, 2]],

#                [[3, 3], [4, 4]]]

# tensor 't' has shape [2, 2, 2]

reshape(t, [2, 4]) ==> [[1, 1, 2, 2],

                        [3, 3, 4, 4]]

3) 如何建立一个batch size可变的计算图?

建立一个batch size可变的计算图一般都是很有用的,比如相同的代码可以用于(mini-)batch training,single-instance inference。最后结果的计算图可以保存为一个protocol buffer( saved as a protocol buffer),导入进另外一个程序中( imported into another program)。

当建立一个可以大小的计算图时,最重要的事情是记住不要将batch size编码为Python的常量,而是要使用一个Tensor来表示它。下面两个说明可能是有用的:

(1)     使用batch_size = tf.shape(input)[0]从一个称为input的Tensor提取batch的维度,并且保存为名字叫batch_size的Tensor 。

(2)     使用tf.reduce_mean而不是tf.reduce_sum(...) / batch_size。

TensorBoard

1) 如何可视化TensorFlow计算图?

查看教程graph visualization tutorial

2) 把数据送到TensorBoard的最简单的方式是什么?

将summary ops加入到你的TensorFlow graph中,然后将这些summaries写到一个log目录下。接下来就可以使用如下命名启动TensorBoard:

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

更多细节,可以查看 Summaries and TensorBoard tutorial

3) 每次启动启动TensorBoard,就会弹出一个网络安全警告

你可以通过flag --host=localhost,来改变TensorBoard浏览器中的地址为localhost,而不是‘0.0.0.0’。

TensorFlow扩展(Extending TensorFlow)

1) 我的数据是自定义的格式,我如何使用TensorFlow读取该数据?

有3种主要的方法来处理自定义格式的数据。

最简单的方式是再Python中写一个解析代码,将该数据转换为一个numpy array。然后使用 tf.contrib.data.Dataset.from_tensor_slices从内存数据中创建一个输入管道(pipeline)。

2) 如果你的数据在内存中不合适(原话是:If your data doesn't fit in memory),那么尝试在Dataset pipeline中做解析。从一个合适的file reader开始,比如tf.contrib.data.TextLineDataset。然后通过映射(mapping)合适的操作转换数据集。更倾向于使用已经定义好的TensorFlow Operations,比如tf.decode_rawtf.decode_csvtf.parse_example, or tf.image.decode_png

3) 如果你的数据在使用TensorFlow自带函数不容易解析的情况下,可以考虑线下将其转换为可以容易解析的数据,比如${tf.python_io.TFRecordWriter$TFRecord} 格式。

还有一个更加有效的解析数据的方法就是增加一个用C++写的新的op,一个可以解析你数据的op。可以参考 guide to handling new data formats

其他

1) TensorFlow的编码风格是什么?

TensorFlow Python API遵守 PEP8编码风格。我们对类使用CamelCase风格,对函数、方法、属性(functions, methods, and properties)使用snake_case风格。我们也遵守 Google Python style guide

TensorFlow C++代码遵守Google C++ style guide

原文链接:https://www.tensorflow.org/versions/master/programmers_guide/faq

[翻译] TensorFlow Programmer's Guide之Frequently Asked Questions(问得频率最多的几个问题)的更多相关文章

  1. TensorFlow 官方文档 Programmer's Guide 中文翻译 —— 引言

    TensorFlow Programmer's Guide (Introduction) TensorFlow 编程手册 (引言) #(本项目对tensorflow官网上给出的指导手册(TF1.3版本 ...

  2. [转帖]Programmer’s guide to the big tech companies 💻

    Programmer’s guide to the big tech companies

  3. [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems"

    [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed ...

  4. [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow"

    [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow" 目录 [翻译] TensorFlow ...

  5. 06 Frequently Asked Questions (FAQ) 常见问题解答 (常见问题)

    Frequently Asked Questions (FAQ) Origins 起源 What is the purpose of the project? What is the history ...

  6. Relinking Oracle Home FAQ ( Frequently Asked Questions) (Doc ID 1467060.1)

    In this Document   Purpose   Questions and Answers   1)  What is relinking ?   2)  What is relinking ...

  7. Frequently Asked Questions

    转自:http://www.tornadoweb.org/en/stable/faq.html Frequently Asked Questions Why isn’t this example wi ...

  8. tmux frequently asked questions

    tmux frequently asked questions How is tmux different from GNU screen?     tmux and GNU screen have ...

  9. 成员函数指针 C++ FAQ LITE — Frequently Asked Questions

    http://www.sunistudio.com/cppfaq/pointers-to-members.html C++ FAQ LITE — Frequently Asked Questions ...

随机推荐

  1. Junit test使用

    1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...

  2. AngularJs的resource服务与Rest服务交互

    前言以后补: * 在使用resource服务返回的资源对象后具有与后台数据交互的五大接口:save query delete remove get 五种默认行为: { "get": ...

  3. [Luogu 1395] 会议

    题目 Description 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那 ...

  4. MySQL数据库学习三 数据库对象和基本操作

    3.1 数据库和数据对象 1. 系统数据库 information_schema:主要存储系统中的一些数据库对象信息,如用户列表信息.列信息.权限信息.字符集信息和分区信息等. performance ...

  5. Oracle 12c(12.1.0.5)OEM server agent 安装配置

    注意: 此文档为生产上操作文档,省略了IP,oracle用户server,agent 端至少需要sudo,ping,ssh,创建目录权限. 一.安装要求 1.1. 系统情况一览 IP 数据库 OEM ...

  6. 【itchat】用Python玩耍微信

    [itchat] itchat是个基于网页版微信的python微信API.功能目前做到基本可以满足正常的消息收发,信息的获取等等.不过对于红包之类网页版微信不支持的功能,这个模块自然也就无法支持了. ...

  7. 由浅入深理解----java反射技术

    java反射机制详解 java反射机制是在运行状态下,对任意一个类可以获取该类的属性和方法,对任意一个对象可以调用其属性和方法.这种动态的获取信息和调用对象的方法的功能称为java的反射机制 clas ...

  8. Python 自学 之 String 常见操作

    这是在Python 3.5.3版本下测试的.# Author Taylor_Manitoname ="my name is alex"#capitalized 大写的print(& ...

  9. Git详细教程(1)---个人Git的基本使用

    分布式版本控制系统--git 一.什么是Git 1.Git是什么 Git是目前世界上最先进的分布式版本控制系统(没有之一). 实际上版本控制系统有如下几个: 1) CVS 2)  SVN 3) Git ...

  10. 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...