TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作。

操作组 操作
Building Graphs Core graph data structures,Tensor types,Utility functions
Inputs and Readers Placeholders,Readers,Converting,Queues,Input pipeline

1、建立图(Building Graphs)

1.1 核心图的数据结构(Core graph data structures)

tf.Graph

操作 描述
class tf.Graph tensorflow中的计算以图数据流的方式表示
一个图包含一系列表示计算单元的操作对象
以及在图中流动的数据单元以tensor对象表现
tf.Graph.__init__() 建立一个空图
tf.Graph.as_default() 一个将某图设置为默认图,并返回一个上下文管理器
如果不显式添加一个默认图,系统会自动设置一个全局的默认图。
所设置的默认图,在模块范围内所定义的节点都将默认加入默认图中
tf.Graph.as_graph_def
(from_version=None, add_shapes=False)
返回一个图的序列化的GraphDef表示
序列化的GraphDef可以导入至另一个图中(使用 import_graph_def())
或者使用C++ Session API
tf.Graph.finalize() 完成图的构建,即将其设置为只读模式
tf.Graph.finalized 返回True,如果图被完成
tf.Graph.control_dependencies(control_inputs) 定义一个控制依赖,并返回一个上下文管理器
with g.control_dependencies([a, b, c]):
# `d` 和 `e` 将在 `a`, `b`, 和`c`执行完之后运行.
d = …
e = …
tf.Graph.device(device_name_or_function) 定义运行图所使用的设备,并返回一个上下文管理器
with g.device('/gpu:0'): ...
with g.device('/cpu:0'): ...
tf.Graph.name_scope(name) 为节点创建层次化的名称,并返回一个上下文管理器
tf.Graph.add_to_collection(name, value) 将value以name的名称存储在收集器(collection)中
tf.Graph.get_collection(name, scope=None) 根据name返回一个收集器中所收集的值的列表
tf.Graph.as_graph_element
(obj, allow_tensor=True, allow_operation=True)
返回一个图中与obj相关联的对象,为一个操作节点或者tensor数据
tf.Graph.get_operation_by_name(name) 根据名称返回操作节点
tf.Graph.get_tensor_by_name(name) 根据名称返回tensor数据
tf.Graph.get_operations() 返回图中的操作节点列表
tf.Graph.gradient_override_map(op_type_map) 用于覆盖梯度函数的上下文管理器

tf.Operation

操作

描述

class tf.Operation

代表图中的一个节点,用于计算tensors数据
该类型将由python节点构造器产生(比如tf.matmul())
或者Graph.create_op()
例如c = tf.matmul(a, b)创建一个Operation类
为类型为”MatMul”,输入为’a’,’b’,输出为’c’的操作类

tf.Operation.name

操作节点(op)的名称

tf.Operation.type

操作节点(op)的类型,比如”MatMul”

tf.Operation.inputs
tf.Operation.outputs

操作节点的输入与输出

tf.Operation.control_inputs

操作节点的依赖

tf.Operation.run(feed_dict=None,
session=None)

在会话(Session)中运行该操作

tf.Operation.get_attr(name)

获取op的属性值

tf.Tensor

操作

描述

class tf.Tensor

表示一个由操作节点op产生的值,
TensorFlow程序使用tensor数据结构来代表所有的数据, 
计算图中, 操作间传递的数据都是 tensor,一个tensor是一个符号handle,
里面并没有表示实际数据,而相当于数据流的载体

tf.Tensor.dtype

tensor中数据类型

tf.Tensor.name

该tensor名称

tf.Tensor.value_index

该tensor输出外op的index

tf.Tensor.graph

该tensor所处在的图

tf.Tensor.op

产生该tensor的op

tf.Tensor.consumers()

返回使用该tensor的op列表

tf.Tensor.eval(feed_dict=None,
session=None)

在会话中求tensor的值
需要使用with sess.as_default()或者 eval(session=sess)

tf.Tensor.get_shape()

返回用于表示tensor的shape的类TensorShape

tf.Tensor.set_shape(shape)

更新tensor的shape

tf.Tensor.device

设置计算该tensor的设备

1.2 tensor类型(Tensor types)

tf.DType

操作

描述

class tf.DType

数据类型主要包含
tf.float16,tf.float16,tf.float32,tf.float64,
tf.bfloat16,tf.complex64,tf.complex128,
tf.int8,tf.uint8,tf.uint16,tf.int16,tf.int32,
tf.int64,tf.bool,tf.string

tf.DType.is_compatible_with(other)

判断other的数据类型是否将转变为该DType

tf.DType.name

数据类型名称

tf.DType.base_dtype

返回该DType的基础DType,而非参考的数据类型(non-reference)

tf.DType.as_ref

返回一个基于DType的参考数据类型

tf.DType.is_floating

判断是否为浮点类型

tf.DType.is_complex

判断是否为复数

tf.DType.is_integer

判断是否为整数

tf.DType.is_unsigned

判断是否为无符号型数据

tf.DType.as_numpy_dtype

返回一个基于DType的numpy.dtype类型

tf.DType.max
tf.DType.min

返回这种数据类型能表示的最大值及其最小值

tf.as_dtype(type_value)

返回由type_value转变得的相应tf数据类型

1.3 通用函数(Utility functions)

操作

描述

tf.device(device_name_or_function)

基于默认的图,其功能便为Graph.device()

tf.container(container_name)

基于默认的图,其功能便为Graph.container()

tf.name_scope(name)

基于默认的图,其功能便为 Graph.name_scope()

tf.control_dependencies(control_inputs)

基于默认的图,其功能便为Graph.control_dependencies()

tf.convert_to_tensor
(value, dtype=None, name=None, as_ref=False)

将value转变为tensor数据类型

tf.get_default_graph()

返回返回当前线程的默认图

tf.reset_default_graph()

清除默认图的堆栈,并设置全局图为默认图

tf.import_graph_def(graph_def,
input_map=None,
return_elements=None, name=None, op_dict=None,
producer_op_list=None)

将graph_def的图导入到python中

1.4 图收集(Graph collections)

操作

描述

tf.add_to_collection(name, value)

基于默认的图,其功能便为Graph.add_to_collection()

tf.get_collection(key, scope=None)

基于默认的图,其功能便为Graph.get_collection()

1.5 定义新操作节点(Defining new operations)

tf.RegisterGradient

操作

描述

class tf.RegisterGradient

返回一个用于寄存op类型的梯度函数的装饰器

tf.NoGradient(op_type)

设置操作节点类型op_type的节点没有指定的梯度

class tf.RegisterShape

返回一个用于寄存op类型的shape函数的装饰器

class tf.TensorShape

表示tensor的shape

tf.TensorShape.merge_with(other)

与other合并shape信息,返回一个TensorShape类

tf.TensorShape.concatenate(other)

与other的维度相连结

tf.TensorShape.ndims

返回tensor的rank

tf.TensorShape.dims

返回tensor的维度

tf.TensorShape.as_list()

以list的形式返回tensor的shape

tf.TensorShape.is_compatible_with(other)

判断shape是否为兼容
TensorShape(None)与其他任何shape值兼容

class tf.Dimension

 

tf.Dimension.is_compatible_with(other)

判断dims是否为兼容

tf.Dimension.merge_with(other)

与other合并dims信息

tf.op_scope(values, name,
default_name=None)

在python定义op时,返回一个上下文管理器

2、输入和读取器(Inputs and Readers)

2.1 占位符(Placeholders)

tf提供一种占位符操作,在执行时需要为其提供数据data。

操作

描述

tf.placeholder(dtype, shape=None, name=None)

为一个tensor插入一个占位符
eg:x = tf.placeholder(tf.float32, shape=(1024, 1024))

tf.placeholder_with_default(input,
shape, name=None)

当输出没有fed时,input通过一个占位符op

tf.sparse_placeholder(dtype,
shape=None, name=None)

为一个稀疏tensor插入一个占位符

2.2 读取器(Readers)

tf提供一系列读取各种数据格式的类。对于多文件输入,可以使用函数tf.train.string_input_producer,该函数将创建一个保持文件的FIFO队列,以供reader使用。或者如果输入的这些文件名有相雷同的字符串,也可以使用函数tf.train.match_filenames_once

操作

描述

class tf.ReaderBase

不同的读取器类型的基本类

tf.ReaderBase.read(queue, name=None)

返回下一个记录对(key, value),queue为tf文件队列FIFOQueue

tf.ReaderBase.read_up_to(queue, num_records, name=None)

返回reader产生的num_records对(key, value)

tf.ReaderBase.reader_ref

返回应用在该reader上的Op

tf.ReaderBase.reset(name=None)

恢复reader为初始状态

tf.ReaderBase.restore_state(state, name=None)

恢复reader为之前的保存状态state

tf.ReaderBase.serialize_state(name=None)

返回一个reader解码后产生的字符串tansor

class tf.TextLineReader

 

tf.TextLineReader.num_records_produced(name=None)

返回reader已经产生的记录(records )数目

tf.TextLineReader.num_work_units_completed(name=None)

返回该reader已经完成的处理的work数目

tf.TextLineReader.read(queue, name=None)

返回reader所产生的下一个记录对 (key, value),该reader可以限定新产生输出的行数

tf.TextLineReader.reader_ref

返回应用在该reader上的Op

tf.TextLineReader.reset(name=None)

恢复reader为初始状态

tf.TextLineReader.restore_state(state, name=None)

恢复reader为之前的保存状态state

tf.TextLineReader.serialize_state(name=None)

返回一个reader解码后产生的字符串tansor

class tf.WholeFileReader

一个阅读器,读取整个文件,返回文件名称key,以及文件中所有的内容value,该类的方法同上,不赘述

class tf.IdentityReader

一个reader,以key和value的形式,输出一个work队列。该类其他方法基本同上

class tf.TFRecordReader

读取TFRecord格式文件的reader。该类其他方法基本同上

class tf.FixedLengthRecordReader

输出

2.3 数据转换(Converting)

tf提供一系列方法将各种格式数据转换为tensor表示。

操作

描述

tf.decode_csv(records, record_defaults, 
field_delim=None, name=None)

将csv转换为tensor,与tf.TextLineReader搭配使用

tf.decode_raw(bytes, out_type, 
little_endian=None, name=None)

将bytes转换为一个数字向量表示,bytes为一个字符串类型的tensor
与函数
tf.FixedLengthRecordReader搭配使用,详见tf的CIFAR-10例子

选取与要输入的文件格式相匹配的reader,并将文件队列提供给reader的读方法( read method)。读方法将返回文件唯一标识的key,以及一个记录(record)(有助于对出现一些另类的records时debug),以及一个标量的字符串值。再使用一个(或多个)解码器(decoder) 或转换操作(conversion ops)将字符串转换为tensor类型。

2.4 Example protocol buffer

提供了一些Example protocol buffers,tf所推荐的用于训练样本的数据格式,它们包含特征信息,详情可见。 
这是一种与前述将手上现有的各种数据类型转换为支持的格式的方法,这种方法更容易将网络结构与数据集融合或匹配。这种tensorflow所推荐的数据格式是一个包含tf.train.Example protocol buffers (包含特征Features域)的TFRecords文件。 
1、获取这种格式的文件方式为,首先将一般的数据格式填入Example protocol buffer中,再将 protocol buffer序列化为一个字符串,然后使用tf.python_io.TFRecordWriter类的相关方法将字符串写入一个TFRecords文件中,参见MNIST例子,将MNIST 数据转换为该类型数据。 
2、读取TFRecords格式文件的方法为,使用tf.TFRecordReader读取器和tf.parse_single_example解码器。parse_single_example操作将 example protocol buffers解码为tensor形式。参见MNIST例子

操作

描述

class tf.VarLenFeature

解析变长的输入特征feature相关配置

class tf.FixedLenFeature

解析定长的输入特征feature相关配置

class tf.FixedLenSequenceFeature

序列项目中的稠密(dense )输入特征的相关配置

tf.parse_example(serialized, features, 
name=None, example_names=None)

将一组Example protos解析为tensor的字典形式
解析serialized所给予的序列化的一些Example protos
返回一个由特征keys映射Tensor和SparseTensor值的字典

tf.parse_single_example(serialized,
features, 
name=None, example_names=None)

解析一个单独的Example proto,与tf.parse_example方法雷同

tf.decode_json_example(json_examples,
name=None)

将JSON编码的样本记录转换为二进制protocol
buffer字符串

2.5 队列(Queues)

tensorflow提供了几个队列应用,用来将tf计算图与tensors的阶段流水组织到一起。队列是使用tensorflow计算的一个强大的机制,正如其他Tensorflow的元素一样,一个队列也是tf图中的一个节点(node),它是一个有状态的node,就像一个变量:其他节点可以改变其内容。 
我们来看一个简单的例子,如下gif图,我们将创建一个先入先出队列(FIFOQueue)并且将值全设为0,然后我们构建一个图以获取队列出来的元素,对该元素加1操作,并将结果再放入队列末尾。渐渐地,队列中的数字便增加。

操作

描述

class tf.QueueBase

基本的队列应用类.队列(queue)是一种数据结构,
该结构通过多个步骤存储tensors,
并且对tensors进行入列(enqueue)与出列(dequeue)操作

tf.QueueBase.enqueue(vals, name=None)

将一个元素编入该队列中。如果在执行该操作时队列已满,
那么将会阻塞直到元素编入队列之中

tf.QueueBase.enqueue_many(vals,
name=None)

将零个或多个元素编入该队列中

tf.QueueBase.dequeue(name=None)

将元素从队列中移出。如果在执行该操作时队列已空,
那么将会阻塞直到元素出列,返回出列的tensors的tuple

tf.QueueBase.dequeue_many(n,
name=None)

将一个或多个元素从队列中移出

tf.QueueBase.size(name=None)

计算队列中的元素个数

tf.QueueBase.close
(cancel_pending_enqueues=False, name=None)

关闭该队列

f.QueueBase.dequeue_up_to(n,
name=None)

从该队列中移出n个元素并将之连接

tf.QueueBase.dtypes

列出组成元素的数据类型

tf.QueueBase.from_list(index, queues)

根据queues[index]的参考队列创建一个队列

tf.QueueBase.name

返回最队列下面元素的名称

tf.QueueBase.names

返回队列每一个组成部分的名称

class tf.FIFOQueue

在出列时依照先入先出顺序,其他方法与tf.QueueBase雷同

class tf.PaddingFIFOQueue

一个FIFOQueue ,同时根据padding支持batching变长的tensor

class tf.RandomShuffleQueue

该队列将随机元素出列,其他方法与tf.QueueBase雷同

2.6 文件系统的处理(Dealing with the filesystem)

操作

描述

tf.matching_files(pattern, name=None)

返回与pattern匹配模式的文件名称

tf.read_file(filename, name=None)

读取并输出输入文件的整个内容

2.7 输入管道(Input pipeline)

用于设置输入预取数的管道TF函数,函数 “producer”添加一个队列至图中,同时一个相应用于运行队列中子图(subgraph)的QueueRunner

操作

描述

tf.train.match_filenames_once(pattern, name=None)

保存与pattern的文件列表

tf.train.limit_epochs(tensor, num_epochs=None, name=None)

返回一个num_epochs次数,然后报告OutOfRange错误

tf.train.input_producer(input_tensor, element_shape=None, 
num_epochs=None, shuffle=True, seed=None, capacity=32, 
shared_name=None, summary_name=None, name=None)

为一个输入管道输出input_tensor中的多行至一个队列中

tf.train.range_input_producer(limit,
num_epochs=None, 
shuffle=True, seed=None, capacity=32, 
shared_name=None, name=None)

产生一个从1至limit-1的整数至队列中

tf.train.slice_input_producer(tensor_list,
num_epochs=None, 
shuffle=True, seed=None, capacity=32, 
shared_name=None, name=None)

对tensor_list中的每一个tensor切片

tf.train.string_input_producer(string_tensor,
num_epochs=None,
shuffle=True, seed=None, capacity=32, 
shared_name=None, name=None)

为一个输入管道输出一组字符串(比如文件名)至队列中

2.8 在输入管道末端批量打包(Batching at the end of an input pipeline)

该相关函数增添一个队列至图中以将数据一样本打包为batch。它们也会添加 一个QueueRunner,以便执行的已经被填满队列的子图

操作

描述

tf.train.batch(tensors, batch_size, num_threads=1,
capacity=32, enqueue_many=False, shapes=None, 
dynamic_pad=False, allow_smaller_final_batch=False, 
shared_name=None, name=None)

在输入的tensors中创建一些tensor数据格式的batch,
若输入为shape[*, x, y,
z],那么输出则为[batch_size,
x, y, z]
返回一个列表或者一个具有与输入tensors相同类型tensors的字典

tf.train.batch_join(tensors_list,
batch_size, 
capacity=32, enqueue_many=False, shapes=None, 
dynamic_pad=False, allow_smaller_final_batch=False, 
shared_name=None, name=None)

将一个tensors的列表添加至一个队列中以创建样本的batches
len(tensors_list)个线程将启动,
线程i将tensors_list[i]的tensors入列
tensors_list[i1][j]与tensors_list[i2][j]有相同的类型和shape

tf.train.shuffle_batch(tensors,
batch_size, capacity, 
min_after_dequeue, num_threads=1, seed=None, 
enqueue_many=False, shapes=None, 
allow_smaller_final_batch=False,
shared_name=None, name=None)

使用随机乱序的方法创建batches
tensors:用于入列的一个list或者dict
capacity:一个整数,表示队列中元素最大数目

tf.train.shuffle_batch_join(tensors_list,
batch_size, 
capacity, min_after_dequeue, seed=None, 
enqueue_many=False, shapes=None, 
allow_smaller_final_batch=False, 
shared_name=None, name=None)

随机乱序的tensors创建batches,
其中tensors_list参数为tensors元组或tensors字典的列表
len(tensors_list)个线程将启动,
线程i将tensors_list[i]的tensors入列
tensors_list[i1][j]与tensors_list[i2][j]有相同的类型和shape

tenaorflow函数(1)的更多相关文章

  1. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  5. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  6. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  7. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  8. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  9. C++中的时间函数

    C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...

随机推荐

  1. DataGridView列标题居中,内容居中

    //列标题居中 dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleC ...

  2. Chrome Ajax 跨域设置

    一.前言 web 开发中 Ajax 是十分常见的技术,但是在前后端使用接口对接的调试过程中不可避免会碰到跨域问题.今天我给大家介绍一个十分简单有效的方法. 跨域经典错误 二.Chrome 跨域设置 首 ...

  3. 【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)

    [BZOJ1488][HNOI2009]图的同构(Burside引理,Polya定理) 题面 BZOJ 洛谷 题解 求本质不同的方案数,很明显就是群论这套理论了. 置换一共有\(n!\)个,考虑如何对 ...

  4. dp乱写1:状态压缩dp(状压dp)炮兵阵地

    https://www.luogu.org/problem/show?pid=2704 题意: 炮兵在地图上的摆放位子只能在平地('P') 炮兵可以攻击上下左右各两格的格子: 而高原('H')上炮兵能 ...

  5. std::bind常见的坑

    http://note.youdao.com/noteshare?id=bce9cdea8e94501186b5ba3026af685f

  6. Elasticsearch 5.0 安装 Search Guard 5 插件

    一.Search Guard 简介 Search Guard  是 Elasticsearch 的安全插件.它为后端系统(如LDAP或Kerberos)提供身份验证和授权,并向Elasticsearc ...

  7. Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)

    /tmp目录文件重启后自动删除现在知道有ubuntu和solaris系统source:http://blog.chinaunix.net/uid-26212859-id-3567875.html经常会 ...

  8. saltstack主机管理项目【day23】:主机管理项目需求分析-设计

    本节内容 一. 主机管理项目需求分析 二 .主机管理项目架构设计 三.主机管理项目初始构建 四. 主机管理项目编主机分发器 一. 主机管理项目需求分析 场景:我现在又一台裸机要实现一下人物 配置管理: ...

  9. Why is my Spring @Autowired field null?

    spring有@Autowired 空指针异常 https://stackoverflow.com/questions/19896870/why-is-my-spring-autowired-fiel ...

  10. 数学:拓展Lucas定理

    拓展Lucas定理解决大组合数取模并且模数为任意数的情况 大概的思路是把模数用唯一分解定理拆开之后然后去做 然后要解决的一个子问题是求模质数的k次方 将分母部分转化成逆元再去做就好了 这里贴一份别人的 ...