tenaorflow函数(1)
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数据 |
tf.Operation.name |
操作节点(op)的名称 |
tf.Operation.type |
操作节点(op)的类型,比如”MatMul” |
tf.Operation.inputs |
操作节点的输入与输出 |
tf.Operation.control_inputs |
操作节点的依赖 |
tf.Operation.run(feed_dict=None, |
在会话(Session)中运行该操作 |
tf.Operation.get_attr(name) |
获取op的属性值 |
tf.Tensor
操作 |
描述 |
class tf.Tensor |
表示一个由操作节点op产生的值, |
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, |
在会话中求tensor的值 |
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.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.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转变为tensor数据类型 |
tf.get_default_graph() |
返回返回当前线程的默认图 |
tf.reset_default_graph() |
清除默认图的堆栈,并设置全局图为默认图 |
tf.import_graph_def(graph_def, |
将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是否为兼容 |
class tf.Dimension |
|
tf.Dimension.is_compatible_with(other) |
判断dims是否为兼容 |
tf.Dimension.merge_with(other) |
与other合并dims信息 |
tf.op_scope(values, name, |
在python定义op时,返回一个上下文管理器 |
2、输入和读取器(Inputs and Readers)
2.1 占位符(Placeholders)
tf提供一种占位符操作,在执行时需要为其提供数据data。
操作 |
描述 |
tf.placeholder(dtype, shape=None, name=None) |
为一个tensor插入一个占位符 |
tf.placeholder_with_default(input, |
当输出没有fed时,input通过一个占位符op |
tf.sparse_placeholder(dtype, |
为一个稀疏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, |
将csv转换为tensor,与tf.TextLineReader搭配使用 |
tf.decode_raw(bytes, out_type, |
将bytes转换为一个数字向量表示,bytes为一个字符串类型的tensor |
选取与要输入的文件格式相匹配的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, |
将一组Example protos解析为tensor的字典形式 |
tf.parse_single_example(serialized, |
解析一个单独的Example proto,与tf.parse_example方法雷同 |
tf.decode_json_example(json_examples, |
将JSON编码的样本记录转换为二进制protocol |
2.5 队列(Queues)
tensorflow提供了几个队列应用,用来将tf计算图与tensors的阶段流水组织到一起。队列是使用tensorflow计算的一个强大的机制,正如其他Tensorflow的元素一样,一个队列也是tf图中的一个节点(node),它是一个有状态的node,就像一个变量:其他节点可以改变其内容。
我们来看一个简单的例子,如下gif图,我们将创建一个先入先出队列(FIFOQueue)并且将值全设为0,然后我们构建一个图以获取队列出来的元素,对该元素加1操作,并将结果再放入队列末尾。渐渐地,队列中的数字便增加。
操作 |
描述 |
class tf.QueueBase |
基本的队列应用类.队列(queue)是一种数据结构, |
tf.QueueBase.enqueue(vals, name=None) |
将一个元素编入该队列中。如果在执行该操作时队列已满, |
tf.QueueBase.enqueue_many(vals, |
将零个或多个元素编入该队列中 |
tf.QueueBase.dequeue(name=None) |
将元素从队列中移出。如果在执行该操作时队列已空, |
tf.QueueBase.dequeue_many(n, |
将一个或多个元素从队列中移出 |
tf.QueueBase.size(name=None) |
计算队列中的元素个数 |
tf.QueueBase.close |
关闭该队列 |
f.QueueBase.dequeue_up_to(n, |
从该队列中移出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, |
为一个输入管道输出input_tensor中的多行至一个队列中 |
tf.train.range_input_producer(limit, |
产生一个从1至limit-1的整数至队列中 |
tf.train.slice_input_producer(tensor_list, |
对tensor_list中的每一个tensor切片 |
tf.train.string_input_producer(string_tensor, |
为一个输入管道输出一组字符串(比如文件名)至队列中 |
2.8 在输入管道末端批量打包(Batching at the end of an input pipeline)
该相关函数增添一个队列至图中以将数据一样本打包为batch。它们也会添加 一个QueueRunner,以便执行的已经被填满队列的子图
操作 |
描述 |
tf.train.batch(tensors, batch_size, num_threads=1, |
在输入的tensors中创建一些tensor数据格式的batch, |
tf.train.batch_join(tensors_list, |
将一个tensors的列表添加至一个队列中以创建样本的batches |
tf.train.shuffle_batch(tensors, |
使用随机乱序的方法创建batches |
tf.train.shuffle_batch_join(tensors_list, |
随机乱序的tensors创建batches, |
tenaorflow函数(1)的更多相关文章
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- C++对C的函数拓展
一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- 复杂的 Hash 函数组合有意义吗?
很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...
- JS核心系列:浅谈函数的作用域
一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...
- C++中的时间函数
C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...
随机推荐
- js new关键字
实现new 关键字只需4步 1. 声明一个对象: 2. 把这个对象的__proto__ 指向构造函数的 prototype; 3. 以构造函数为上下文执行这个对象: 4. 返回这个对象. 简洁的代码示 ...
- BZOJ4066 简单题(KD-Tree)
板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- MT【91】空间余弦定理
评:空间余弦定理:空间四边形$ABCD$中$cos<AC,BD>=\frac{|(|AB|^2+|CD|^2)-(|BC|^2+|AD|^2)}{2|AC||BD|}$,证明用向量.
- 【刷题】BZOJ 1023 [SHOI2008]cactus仙人掌图
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- HGOI20180814 (NOIP 模拟Day1)
100pts=40+60+0 rank 56 若串联那么显然是这样: 若并联那么显然是这样: 串联时C<1,并联时C>1,贪心策略<1时尽可能串联,>1时尽可能并联 考虑这样一 ...
- 【转】汽车CAN总线
概述 CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而 ...
- IntelliJ IDEA远程调试运行中的JAVA程序/项目
一.IntelliJ IDEA配置 1.添加一个运行配置(remote项) 2.打开remote项配置对话框 3.远程jvm参数配置提示 4.远程调试的ip地址和端口号,ip就是java项目所在机器i ...
- 通用权限管理系统底层更换最新Oracle驱动的方法
通用权限管理系统底层先前访问Oracle数据库时需要客户端安装驱动软件,如下图: 安装完毕还需要一番配置,系统再引用其dll, 现在我们使用了最新的dll 该dll是Oracle出的最新的版本. 通用 ...
- Centos7搭建SS以及加速配置的操作记录
部署 Shadowsocks之前,对它做了一个简单的了解,下面先介绍下.一道隐形的墙众所周知,天朝局域网通过 GFW (中国防火墙长城:英文名称Great Firewall of China,简写为G ...
- SQL Server 数据库对象命名参考
一. 引言 编码规范是一个优秀程序员的必备素质,然而,有很多人非常注重程序中变量.方法.类的命名,却忽视了同样重要的数据库对象命名.这篇文章结合许多技术文章和资料,以及我自己的开发经验,对数据库对象的 ...