原文链接: tensorflow 一些概念

上一篇: Python 矩阵转图片

下一篇: 基础算法

为什么  c = tf.matmul(a, b) 不立即执行矩阵相乘?
在 TensorFlow 的 Python API 中, a , b , and c 都是 Tensor 对象. 一个 Tensor 对象是一个操作(ope
ration)结果的字符别名,它实际上并不储存操作(operation)输出结果的值。 TensorFlow 鼓励用户去建立复杂的
表达式(如整个神经网络及其梯度)来形成 data flow graph 。 然后你可以将整个 data flow graph 的计算过
程交给一个 TensorFlow 的 Session , 此 Session 可以运行整个计算过程,比起操作(operations)一条一条的
执行效率高的多。

请详细解释 feeding 和 placeholders?
Feeding 是 TensorFlow Session API 的一种机制,它允许你在运行时用不同的值替换一个或多个 tensor 的
值。 Session.run() 的参数 feed_dict 是一个字典, 它将 Tensor 对象映射为 numpy 的数组(和一些其他
类型)。 在执行 step 时,这些数组就是 tensor 的值。
你常会碰到某些 tensor 总是有值的,比如 inputs。 tf.placeholder() 操作(operation)允许你定义一种必须
提供值的 tensor ,你也可以随意限定它们的 shape。关于如何使用 placelolders 和 feeding 为神经网络提供
训练数据的例子,请参看初学者的 MNIST 教程
Session.run() 和 Tensor.eval() 有什么区别?
如果 t 是一个 Tensor 对象, t.eval() 就是 sess.run(t) ( sess 是当前默认 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()
在第二个例子中, session 的作用就象 context manager , context manager 在 with 块的生存期,将 sess
ion 作为默认的 session。对简单应用的情形(如单元测试),context manager 的方法可以得到更简洁的代
码; 如果你的代码要处理多个 graph 和 session ,更直白的方式可能是显式调用 Session.run() 。
第 4 章 资源 | 163
Sessions 有生存期吗? 调用时产生的 tensors 呢?
Session 能够占有资源,例如 variables,queues, 和 readers; 这些资源会使用相当大量的内存。 当调用 Sess
ion.close() 关闭 session 后,这些资源(和相关的内存)就被释放了。
作为调用 Session.run() 过程的一部分所创建的 tensors, 会在调用时或调用结束前释放。
我可以在多个计算机上运行分布式的训练吗?
最初的 TensorFlow 开源版本支持单一计算机内的多设备(CPUs 和 GPUs)。 我们也正在致力于一个分布式的版
本:如果你有兴趣,请告知我们,这样我们可以做相应的调整。
运行时会并行计算图的执行的各个部分(parts of graph execution)吗?
TensorFlow 运行时会在许多不同的层面(dimensions)并行图的执行(graph execution):
• 在一个CPU中用多核或是一个GPU中用多线程来并行许多单独的操作(operation)。
• 在 TensorFlow graph 中各个独立的节点可以在多个设备上并行,这样就提供了加速的可能。CIFAR-10 用多
GPU 训练.
• Session API 允许并行执行多并发的 steps (如 调用 Session.run())。 如果单一的 step 不使用你计算
机中所有的资源,这种方法可以使运行时有更高的吞吐量。
TensorFlow 支持哪些客户端编程语言?
TensorFlow 被设计成为支持多种客户端语言。当前支持最好的客户端语言是 Python。 C++ 客户端 API 提供了
启动 graph 和运行 steps 的接口; 我们还有一个 用 C++ 建立 graph 的 API,此 API 是实验性的。
从社区的利益出发,我们想要支持更多的客户端语言。 TensorFlow 有一个 基于 C 的客户端 API,它使得用许
多不同的语言创建客户端变得很容易。我们请大家在新语言绑定上做出努力。
TensorFlow 会利用我计算机上所有可用的设备(GPUs 和 CPUs)吗?
TensorFlow 支持多 GPU 和 CPU。 有关 TensorFlow 如何将操作(operations)分配到设备的细节请参看 TensorF
low 如何使用 GPUs 的文档,有关使用多 GPU 的示范实例请参看 CIFAR-10 教程
请注意, TensorFlow 只使用计算能力(compute capability)大于 3.5 的 GPU 设备。
当使用一个 reader 或 一个 queue 时,为什么 Session.run() 会挂起?
reader 类和 queue 类提供特殊的操作(operations),这些操作(operations)在有可用的输入(对有界队列则是空
闲空间)前会 阻塞 。使用这些操作(operations)你可以创建复杂的输入流水线(input pipelines) ,不过,这会
使 TensorFlow 的计算过程更复杂。有关如何使用这些操作(operations)的更多信息请参看 how-to 文档中的使
用 QueueRunner 对象来控制 queues 和 readers。

Variables
参看 Variables 和 变量作用域 的 how-to 文档,还有关于变量的 API 文档
变量的生存期是?
在某一 session 中,当你一开始运行 tf.Variable.initializer 操作(operation)时,变量就会被创建。此 se
ssion 关闭后 它就被摧毁(destroyed)了。
并发读取或存入变量时会是什么情况?
变量可以进行并发的读和写操作(operation)。由于变量是并发(concurrently)更新的, 所以从一个变量中读出
的值可能会改变。在不互斥的条件下,对一个变量的并发的许多赋值操作(operation)是默认允许运行的。在对一
个变量赋值时,如果想要加锁,可以将 use_locking=True 传递给 Variable.assign() 。
Tensor shapes
参看 TensorShape API 文档.
在 Python 中我怎么判断一个 tensor 的 shape ?
在 TensorFlow 中,一个 tensor 具备静态和动态两种 shape 。静态的 shape 可以用 tf.Tensor.get_shape()
方法读出:这种 shape 是由此 tensor 在创建时使用的操作(operations)推导得出的,可能是 partially compl
ete 的。如果静态 shape 没有完整定义(not fully defined)的话,则一个 tensor 的动态 shape 可通过求 t
f.shape(t) 的值得到。
x.set_shape() 和 x = tf.reshape(x) 有什么区别?
tf.Tensor.set_shape() 方法(method)会更新(updates)一个 Tensor 对象的静态 shape ,当静态 shape 信息
不能够直接推导得出的时候,此方法常用来提供额外的 shape 信息。它不改变此 tensor 动态 shape 的信息。
tf.reshape() 操作(operation)会以不同的动态 shape 创建一个新的 tensor。
我怎么创建这样一个 graph ,它在批次大小可变(variable batch sizes)的情形下也可以正常运作?
如果能够创建一个 graph ,在批次大小可变(variable batch sizes)的情形下也可以正常运作将会是十分有用
的,例如可以使用相同的代码完成(小)批量训练((mini-)batch training)和单例推导(single-instance infer
ence)。这样生成的 graph 可以保存起来当作协议缓存(protocol buffer),也可以导入至其他的程序。
创建一个可变大小的 graph 时,要记住最重要的事情是不要将批次大小(batch size)编码成为 Python 常数,而
是用一个字符性(symbolic)的 Tensor 来表示。下面的提示可能会有用:
• 用 batch_size = tf.shape(input)[0] 从一个叫 input 的 Tensor 提取批次的维度(batch dimentio
n),再将其存入一个名为 batch_size 的 Tensor 。
第 4 章 资源 | 165
• 用 tf.reduce_mean() 而不是 tf.reduce_sum(...) / batch_size 。
• 如果你使用 placeholders for feeding input,你就可以用 tf.placeholder(..., shape=[None, ...]) 通
过创建 placeholder 来具体指定一个可变的批次维度(variable batch dimention)。shape 的 None 元素
与可变大小的维度(a variable-sized dimension)相对应。
TensorBoard
我怎样视觉化一个 TensorFlow graph ?
参看 graph 的视觉化教程.
向 TensorBoard 发送数据的最简单的方法是什么?
给你的 TensorFlow graph 增加 summary 操作(ops),接着用 SummaryWriter 将这些 summaries 写入一个 log
directory。然后用以下命令启动 TensorBoard 。
`python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory`
更多细节请参看 Summaries 和 TensorBoard 教程。
扩展 TensorFlow
参看有关向 TensorFlow 添加新操作(oprations) 的 how-to 文档。
我的数据是自定义格式,要怎样用 TensorFlow 来读取它?
有两种主要的操作(operation)来处理自定义格式的数据。
较简单的方法:用 Python 编写一段分词的代码(parsing code),将数据转换成为 numpy array,然后用此数据
把一个 [ tf.placeholder() ] (../api_docs/python/io_ops.md#placeholder) 传送给一个 tensor 。更多的细节
参见 使用 placeholders 进行输入 的相关文档。这个方法比较容易实现,不过分词的部分会成为性能的瓶颈。
更高效的方法是添加一个用 C++ 编写的操作(op),用这个操作(operation)来对你的数据格式进行分词(parse)。
新数据格式处理指南中有更多相关步骤的信息。
我如何定义操作(operation)使得它能够接受可变数量的输入?
TensorFlow 的操作(operation)注册机制允许你定义几种输入:单独的 tensor,一列相同类型的 tensors (例如
把一个可变长列表中的 tensors 相加), 一列不同类型的 tensors (例如将一个 tuple 中的 tensors 入队(enq
ueue))。有关怎样定义这些不同的输入类型的更多细节,请参看添加具有一列输入或输出的操作(op)的相关文
档。
第 4 章 资源 | 166
其他问题
TensorFlow 能使用 Python 3 吗?
我们只用 Python 2.7 进行了测试。我们了解对 Python 3 的兼容性来说,还需要有一些修改,欢迎大家朝这个
方向多努力。
TensorFlow 的代码风格有什么规则?
TensorFlow Python API 遵循 PEP8 惯例。
*
特别的,我们使用 CamelCase 格式作为类名, snake_case 格
式作为方程名, 方法名, 和属性名。我们也遵循 Google Python style guide。
TensorFlow C++ 代码遵循 Google C++ style guide。
( * 有一条例外: 我们使用 2 空格缩进而不是 4 空格缩进)
原文:[Frequently Asked Questionshref="http://tensorflow.org/resources/faq.md") 翻译:Terence Coope
r 校对:Wiki
第 4 章 资源 | 167
术语表
广播操作(Broadcasting operation)
一种用numpy-style broadcasting来保证tensor参数的形态兼容的操作。
Devices
一块可以用来运算并且拥有自己的地址空间的硬件,比如GPU和CPU。
eval
Tensor 的一个方法,返回 Tensor 的值。触发任意一个图计算都需要计算出这个值。只能在一个已经启动的会话
的图中才能调用该 Tensor 值。
Feed
TensorFlow 的一个概念:把一个 Tensor 直接连接到一个会话图表中的任意节点。feed 不是在构建图(graph)的
时候创建,而是在触发图的执行操作时去申请。一个 feed 临时替代一个带有 Tensor 值的节点。把feed数据作
为run( )方法和eval( )方法的参数来初始化运算。方法运行结束后,替换的 feed 就会消失,而最初的节点定义
仍然还在。可以通过tf.placeholder( )把特定的节点指定为 feed 节点来创建它们。详见[Basic Usagehref="ht
tps://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/basic_usage.md").
Fetch
TensorFlow中的一个概念:为了取回运算操作的输出结果。取回的申请发生在触发执行图操作的时候,而不是发
生在建立图的时候。如果要取回一个或多个节点(node)的 Tensor 值,可以通过在 Session 对象上调用run(
)方法并将待取回节点(node)的列表作为参数来执行图表(graph)。详见[Basic Usagehref="https://github.co
m/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/basic_usage.md")。
第 4 章 资源 | 168
Graph(图)
把运算任务描述成一个直接的无环图形(DAG),图表中的节点(node)代表必须要实现的一些操作。图中的边代
表数据或者可控的依赖。GratheDef 是系统中描述一个图表的协议(api),它由一个 NodeDefs 集合组成。一个Gr
aphDef可以转化成一个更容易操作的图表对象。
IndexedSlices(索引化切片)
在 Python API 中,TensorFlow 仅仅在第一维上对 Tensor 有所体现。如果一个 Tensor 有k维,那么一个 Inde
xedSlices 实例在逻辑上代表一个沿着这个 Tensor 第一维的(k-1)维切片的集合。切片的索引被连续储存在一个
单独的一维向量中,而对应的切片则被拼接成一个单独的k维 Tensor。如果 sparsity 不是受限于第一维空
间,请用 SparseTensor。
Node(节点)
图中的一个元素。 把启动一个特定操作的方式称为特定运算图表的一个节点,包括任何用来配置这个操作的属性
的值。对于那些多形态的操作,这些属性包括能完全决定这个节点(Node)签名的充分信息。详见graph.proto。
操作(Op/operation)
在 TensorFlow 的运行时中,它是一种类似 add 或 matmul 或 concat的运算。可以用[how to add an ophre
f="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/how_tos/adding_an_op/index.m
d")中的方法来向运行时添加新的操作。
在 Python 的API中,它是图中的一个节点。在[tf.Operationhref="https://github.com/jikexueyuanwiki/tens
orflow-zh/blob/master/SOURCE/api_docs/python/framework.md")类中列举出了这些操作。一个操作(Operatio
n)的 type 属性决定这个节点(node)的操作类型,比如add和matmul。
Run
在一个运行的图中执行某种操作的行为。要求图必须运行在会话中。
在 Python 的 API 中,它是 Session 类的一个方法[tf.Session.runhref="https://github.com/jikexueyuanwi
ki/tensorflow-zh/blob/master/SOURCE/api_docs/python/client.md")。可以通过 Tensors 来订阅或获取run(
)操作。
第 4 章 资源 | 169
在C++的API中,它是[tensorflow::Sessionhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/m
aster/SOURCE/api_docs/python/client.md")类 的一个方法。
Session(会话)
启动图的第一步是创建一个 Session 对象。Session 提供在图中执行操作的一些方法。
在 Python API中,使用[tf.Sessionhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/
SOURCE/api_docs/python/client.md")。
在 C++ 的API中,[tensorflow::Sessionhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/mas
ter/SOURCE/api_docs/cc/ClassSession.md")是用来创建一个图并运行操作的类:
Shape
Tensor 的维度和它们的大小。
在一个已经启动的图中,它表示流动在节点(node)之间的 Tensor 的属性。一些操作对 shape 有比较强的要
求,如果没有 Shape 属性则会报告错误。
在 Python API中,用创建图的 API 来说明 Tensor 的 Shape 属性。Tensor 的Shape 属性要么只有部分已
知,要么全部未知。详见[tf.TensroShapehref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/ma
ster/SOURCE/api_docs/python/framework.md")
在C++中,Shape 类用来表示 Tensor 的维度。[tensorflow::TensorShapehref="https://github.com/jikexueyu
anwiki/tensorflow-zh/blob/master/SOURCE/api_docs/cc/ClassTensorShape.md")。
SparseTensor
在 Python API 中,它用来表示在 TensorFlow 中稀疏散落在任意地方的 Tensor 。SparseTensor 以字典-值格
式来储存那些沿着索引的非空值。换言之,m个非空值,就包含一个长度为m的值向量和一个由m列索引(indice
s)组成的矩阵。为了提升效率,SparseTensor 需要将 indice(索引)按维度的增加来按序存储,比如行主
序。如果稀疏值仅沿着第一维度,就用 IndexedSlices。
Tensor
Tensor是一种特定的多维数组。比如,一个浮点型的四维数组表示一小批由[batch,height,width,channel]组
成的图片。
第 4 章 资源 | 170
在一个运行的图(graph)中,它是一种流动在节点(node)之间的数据。 在 Python 中,Tensor 类表示添加到图
的操作中的输入和输出,见[tf.Tensorhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/maste
r/SOURCE/api_docs/python/framework.md"),这样的类不持有数据。
在C++中,Tensor是方法[Session::Run( )href="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/ma
ster/SOURCE/api_docs/cc/ClassSession.md)的返回值,见tensorflow::Tensor,这样的 Tensor 持有数据。
原文:[Glossaryhref="https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/resource
s/glossary.md")
翻译:leege100
校对:lonlonago

张量的阶、形状、数据类型
TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一
个静态类型和动态类型的维数.张量可以在图中的节点之间流通.

在TensorFlow系统中,张量的维数来被描述为 阶 .但是张量的阶和矩阵的阶并不是同一个概念.张量的阶(有时是
关于如 顺序 或 度数 或者是 n维 )是张量维数的一个数量描述.比如,下面的张量(使用Python中list定义的)就是2
阶.
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量.对于一个二阶张量你可以用语
句 t[i, j] 来访问其中的任何元素.而对于三阶张量你可以用't[i, j, k]'来访问其中的任何元素.
阶 阶  数学实例 Python 例子
0 纯量 (只有大小)
s = 483
1 向量(大小和方向)
v = [1.1, 2.2, 3.3]
2 矩阵(数据表)
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3 3阶张量 (数据立
体)
t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [1
8]]]
n n阶 (自己想想看)
....
形状
TensorFlow文档中使用了三种记号来方便地描述张量的维度:阶,形状以及维数.下表展示了他们之间的关系:
阶 形状 维数 实例
0 [ ] 0-D 一个 0维张量. 一个纯量.
1 [D0] 1-D 一个1维张量的形式[5].
2 [D0, D1] 2-D 一个2维张量的形式[3, 4].
3 [D0, D1, D2] 3-D 一个3维张量的形式 [1, 4, 3].
n [D0, D1, ... Dn] n-D 一个n维张量的形式 [D0, D1, ... Dn].
形状可以通过Python中的整数列表或元祖(int list或tuples)来表示,也或者用 TensorShape class.
第 4 章 资源 | 172
数据类型
除了维度,Tensors有一个数据类型属性.你可以为一个张量指定下列数据类型中的任意一个类型:
数据类型 Python 类型 描述
DT_FLOAT tf.float32
32 位浮点数.
DT_DOUBLE tf.float64
64 位浮点数.
DT_INT64 tf.int64
64 位有符号整型.
DT_INT32 tf.int32
32 位有符号整型.
DT_INT16 tf.int16
16 位有符号整型.
DT_INT8 tf.int8
8 位有符号整型.
DT_UINT8 tf.uint8
8 位无符号整型.
DT_STRING tf.string
可变长度的字节数组.每一个张量元素都是一个字节数组.
DT_BOOL tf.bool
布尔型.
DT_COMPLEX64 tf.complex64
由两个32位浮点数组成的复数:实数和虚数.
DT_QINT32 tf.qint32
用于量化Ops的32位有符号整型.
DT_QINT8 tf.qint8
用于量化Ops的8位有符号整型.
DT_QUINT8 tf.quint8
用于量化Ops的8位无符号整型.
原文:[Tensor Ranks, Shapes, and Typeshref="http://www.tensorflow.org/resources/dims_types.md")
翻译:nb312
校对:lonlonago

tensorflow 一些概念相关推荐

  1. 机器学习速成课程 | 练习 | Google Development——编程练习:TensorFlow 编程概念

    TensorFlow 编程概念 学习目标: 学习 TensorFlow 编程模型的基础知识,重点了解以下概念: 张量 指令 图 会话 构建一个简单的 TensorFlow 程序,使用该程序绘制一个默认 ...

  2. 深度学习环境搭建之常识(anaconda,cuda,cudnn,python,tensorflow等概念)

    原网址 https://www.jianshu.com/p/62f155eb6ac5 1.什么是python?(面向对象语言) Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台 ...

  3. tensorflow基本概念

    一.tesorflow基本概念 二.计算图 一个机器学习任务的核心是模型的定义以及模型的参数求解方式,对这两者进行抽象之后,可以确定一个唯一的计算逻辑,将这个逻辑用图表示,称之为计算图.计算图表现为有 ...

  4. 机器学习算法 09-02 TensorFlow核心概念 TensorFlow基础代码、TensorFlow线性回归解析解和BGD求法

    目录 1 核心概念 2 代码流程 3 基础代码: 3.1 tf的版本 定义常量 理解tensor 了解session 3. 2   指定设备.  Variable 初始化 .  with块创建sess ...

  5. 【TensorFlow学习之路】一--TensorFlow基本概念

    计算图 计算图是TensorFlow中最基本的一个概念,TensorFlow中的所有计算都会被转化为计算图上的节点. TensorFlow 的名字中己经说明了它最重要的两个概念一一Tensor 和 F ...

  6. MiniFlow,帮助理解TensorFlow关键概念--图

    MiniFlow 在学习TensorFlow之前,让我们学习可微分图(Differentiable graphs),这是TensorFlow用于运行和训练网络的基本抽象.我们将构建一个叫MiniFlo ...

  7. TensorFlow 概念的解析(i.e. 缘由)

    TensorFlow 基本概念解析 -- TensorFlow Machine Learning Cookbook TensorFlow 中的基本概念解析 声明张量 tensorflow 中的主要数据 ...

  8. tensorflow op tf.global_variables_initializer

    一.安装 目前用了tensorflow.deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用. 慢慢长征路 ...

  9. 基于Go语言来理解Tensorflow

    Tensorflow并非一套特定机器学习库--相反,其属于一套通用型计算库,负责利用图形表达计算过程.其核心通过C++语言实现,同时亦绑定有多种其它语言.与Python绑定不同的是,Go编程语言绑定不 ...

最新文章

  1. elk系列7之通过grok分析apache日志
  2. 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本...
  3. Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】
  4. base64报错与已下载模块,但import失败解决
  5. Android studio如何连接三星手机
  6. 六、Analysis of quicksort
  7. 小程序 - 腾讯云 - wafer - PHP - 数据库接口的应用和研究 - 01 - DB::insert
  8. Delphi--过程和函数
  9. Java map遍历
  10. Android Studio一直显示Building“project name”Gradle project info问题详解
  11. 8个前端技术学习网站
  12. Vmware安装深度Deepin图文
  13. MATLAB主题设置配色方案
  14. linux ps1详解,Linux-玩转系统提示符PS1
  15. 三次方程求根公式例子二
  16. keras自然语言处理(四)
  17. 通过Windows防火墙禁止某程序(或软件)联网
  18. 3万字长文带你轻松入门视觉Transformer
  19. SSL证书的加密算法都有哪些?
  20. JD2016版首页改版前端总结(转载整理)

热门文章

  1. 【数据存储】signed,unsigned到底怎么区分?如何计算?
  2. iOS 真机调试出现”A signed resource has been added modified or deleted“错误的解决办法
  3. 使用Python简单地去辅助百万答题
  4. 研华电脑510上电自启_研华工控机BIOS设置通电自启动方法技巧
  5. java 迷你dvd_java基础迷你DVD系统
  6. python 画三角函数_Python计算三角函数之asin()方法的使用
  7. 2022年宜昌市高新技术企业申报奖励政策以及认定条件要求汇总!
  8. 我要的仅此而已:伤感QQ心情日志
  9. CCT Camera Tuning
  10. bitcoin区块结构分析