Tensorflow框架中常见概念和函数 二
来源:互联网 发布:身材丰满的av演员知乎 编辑:程序博客网 时间:2024/06/10 05:25
1、tensorflow的基本运作
为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
其中tf.mul(a, b)函数便是tf的一个基本的算数运算,接下来介绍跟多的相关函数。
2、tf函数
TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作.并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进。大部分核相关的操作都是设备相关的实现,比如GPU。本文主要涉及的相关概念或操作有以下内容:
2.1 建立图(Building Graphs)
本节主要介绍建立tensorflow图的相关类或函数
* 核心图的数据结构(Core graph data structures)
tf.Graph
一个图包含一系列表示计算单元的操作对象
以及在图中流动的数据单元以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 APItf.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)用于覆盖梯度函数的上下文管理器
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
tf.Operation
该类型将由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
TensorFlow程序使用tensor数据结构来代表所有的数据,
计算图中, 操作间传递的数据都是 tensor,一个tensor是一个符号handle,
里面并没有表示实际数据,而相当于数据流的载体tf.Tensor.dtypetensor中数据类型tf.Tensor.name该tensor名称tf.Tensor.value_index该tensor输出外op的indextf.Tensor.graph该tensor所处在的图tf.Tensor.op产生该tensor的optf.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的类TensorShapetf.Tensor.set_shape(shape)更新tensor的shapetf.Tensor.device设置计算该tensor的设备- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
* tensor类型(Tensor types)
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.stringtf.DType.is_compatible_with(other)判断other的数据类型是否将转变为该DTypetf.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数据类型
* 通用函数(Utility functions)
(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中
* 图收集(Graph collections)
* 定义新操作节点(Defining new operations)
tf.RegisterGradient
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时,返回一个上下文管理器
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.2 输入和读取器(Inputs and Readers)
本节主要介绍tensorflow中数据的读入相关类或函数
* 占位符(Placeholders)
tf提供一种占位符操作,在执行时需要为其提供数据data。
eg:x = tf.placeholder(tf.float32, shape=(1024, 1024))tf.placeholder_with_default(input, shape, name=None)当输出没有fed时,input通过一个占位符optf.sparse_placeholder(dtype, shape=None, name=None)为一个稀疏tensor插入一个占位符
* 读取器(Readers)
tf提供一系列读取各种数据格式的类。对于多文件输入,可以使用函数tf.train.string_input_producer,该函数将创建一个保持文件的FIFO队列,以供reader使用。或者如果输入的这些文件名有相雷同的字符串,也可以使用函数tf.train.match_filenames_once。
* 数据转换(Converting)
tf提供一系列方法将各种格式数据转换为tensor表示。
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类型。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
* 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例子
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字符串
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
* 队列(Queues)
tensorflow提供了几个队列应用,用来将tf计算图与tensors的阶段流水组织到一起。队列是使用tensorflow计算的一个强大的机制,正如其他Tensorflow的元素一样,一个队列也是tf图中的一个节点(node),它是一个有状态的node,就像一个变量:其他节点可以改变其内容。
我们来看一个简单的例子,如下gif图,我们将创建一个先入先出队列(FIFOQueue)并且将值全设为0,然后我们构建一个图以获取队列出来的元素,对该元素加1操作,并将结果再放入队列末尾。渐渐地,队列中的数字便增加。
该结构通过多个步骤存储tensors,
并且对tensors进行入列(enqueue)与出列(dequeue)操作tf.QueueBase.enqueue(vals, name=None)将一个元素编入该队列中。如果在执行该操作时队列已满,
那么将会阻塞直到元素编入队列之中tf.QueueBase.enqueue_many(vals, name=None)将零个或多个元素编入该队列中tf.QueueBase.dequeue(name=None)将元素从队列中移出。如果在执行该操作时队列已空,
那么将会阻塞直到元素出列,返回出列的tensors的tupletf.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变长的tensorclass tf.RandomShuffleQueue该队列将随机元素出列,其他方法与tf.QueueBase雷同
* 文件系统的处理(Dealing with the filesystem)
* 输入管道(Input pipeline)
用于设置输入预取数的管道TF函数,函数 “producer”添加一个队列至图中,同时一个相应用于运行队列中子图(subgraph)的QueueRunner
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)为一个输入管道输出一组字符串(比如文件名)至队列中
* 在输入管道末端批量打包(Batching at the end of an input pipeline)
该相关函数增添一个队列至图中以将数据一样本打包为batch。它们也会添加 一个QueueRunner,以便执行的已经被填满队列的子图
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]有相同的类型和shapetf.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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
相关链接:
[1] 安装Tensorflow(Linux ubuntu) http://blog.csdn.net/lenbow/article/details/51203526
[2] ubuntu下CUDA编译的GCC降级安装 http://blog.csdn.net/lenbow/article/details/51596706
[3] ubuntu手动安装最新Nvidia显卡驱动 http://blog.csdn.net/lenbow/article/details/51683783
[4] Tensorflow的CUDA升级,以及相关配置 http://blog.csdn.net/lenbow/article/details/52118116
[5] 基于gensim的Doc2Vec简析 http://blog.csdn.net/lenbow/article/details/52120230
[6] TensorFlow的分布式学习框架简介 http://blog.csdn.net/lenbow/article/details/52130565
[7] Tensorflow一些常用基本概念与函数(1) http://blog.csdn.net/lenbow/article/details/52152766
- Tensorflow框架中常见概念和函数 二
- Tensorflow框架中常见的概念和函数一
- 深度学习中常见的相关概念及TensorFlow中的batch和minibatch
- Tensorflow中一些常见的函数
- Tensorflow 常见函数说明
- 框架、模式基础概念 和 常见的java框架、MVC
- tensorflow常用函数及概念
- tensorflow常用函数及概念
- tensorflow常用函数及概念
- tensorflow实践(二) 基本原理学习和框架使用
- QML概念及框架--在组件中添加函数和信号
- Tensorflow的一些常见函数
- Tensorflow中Graph的概念
- Java中常见概念
- Tensorflow中常见bug记录
- tensorflow学习二:概念知识和一个帮助理解的demo
- tensorflow常用函数 (二)
- 常见函数二
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 发现storm代码的一个Bug
- c/c++ No.24 分割字符串
- 大数据:Spark Core(三)Executor上是如何launch task
- JavaScript的“并发模型”
- Tensorflow框架中常见概念和函数 二
- java 死锁例子
- 关于qt保存数据到txt文件的问题
- 关于Java内部类的很重要的总结
- Docker 基本命令
- 在CentOS 6.5上升级PHP5.5
- 设计模式学习之模版方法模式
- 百度地图生成
- 使用ADB命令安装apk出现问题:Failure [INSTALL_FAILED_NO_MATCHING_ABIS:Failed to etract native libraries