一、TensorFlow概述

xiaoxiao2021-02-28  6

一、边(edge)

TensorFlow 的边有两种连接关系:

数据依赖:实线边表示数据依赖,代表数据,即张量。 前向传播(forword propagation):表示张量在数据流图中从前往后流动一遍;反向传播(backword propagation):表示残差从后向前流动一遍。控制依赖(control dependency):虚线边表示控制依赖,可以用于控制操作的运行,这被用来确保happens-before关系,这类边上没有数据流过,但源节点必须在目的 节点开始执行前完成执行。

1.1 张量的数据类型

二、节点(node)

节点又称为算子,它代表一个操作(operation):

一般用来表示施加的数字运算;数据输入(feed in)的起点或数据输出的终点(push out);读取/写入持久变量 的终点。

2.1 算子类别

三、图(graph)

把操作任务描述成有向无环图,构建图的第一步是创建各个节点。

import tensorflow as tf # 创建一个常量运算操作,产生一个 1×2 矩阵 matrix1 = tf.constant([[3., 3.]]) # 创建另外一个常量运算操作,产生一个 2×1 矩阵 matrix2 = tf.constant([[2.],[2.]]) # 创建一个矩阵乘法运算 ,把 matrix1 和 matrix2 作为输入 # 返回值 product 代表矩阵乘法的结果 product = tf.matmul(matrix1, matrix2)

四、会话(session)

启动图的第一步是创建一个 Session 对象。会话提供在图中执行操作的一些方法。一般的模式是,建立会话,此时会生成一张空图,在会话中添加节点和边,形成一张图,然后执行。

#创建一个会话 with tf.Session() as sess: result = sess.run([product]) print(result)

一般模式是建立会话,此时会生成一个空图,在会话中添加节点和边,形成一个张图,然后执行; 再调用Session对象的run()方法来执行图时,传入一些Tensor, 这个过程叫填充(feed); 返回的结果类型根据输入的类型而定,这个过程叫取回(fetch)。 会话是图交互的一个桥梁,一个会话可以有多个图,会话可以修改图的结构,也可以往图中注入数据进行计算。 因此会话主要有两个API接口:Extend和 Run。 Extend操作是在图中添加节点和边; Run操作是输入计算的节点和填充必要的数据后,进行运算,并输出运算结果。

五、设备(device)

设备是指一块可以用来运算并且拥有自己的地址空间的硬件,如CPU和GPU。 Tensorflow为了实现分布式执行操作,充分计算资源,可以明确指定操作在哪个设备上执行。

with tf.Session() as sess: # 指定在第二个 gpu 上运行 with tf.device("/gpu:0"): matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2)

六、变量(variable)

变量是一种特殊的数据,它在图中有固定的位置,不像普通张量那样可以流动。 例如,创建一个变量张量,使用 tf.Variable()构造函数,这个构造函数需要一个初始值,初始值的形状和类型决定了这个变量的形状和类型:

# 创建一个变量,初始化为标量 0 state = tf.Variable(0, name="counter") #创建一个常量张量 input1 = tf.constant(3.0)

TensorFlow 还提供了填充机制,可以在构建图时使用 tf.placeholder()临时替代任意操作的张量,在调用 Session 对象的 run()方法去执行图时,使用填充数据作为调用的参数,调用结束后, 填充数据就消失。代码示例如下:

input1 = tf.placeholder(tf.float32) input2 = tf.placeholder(tf.float32) output = tf.multiply(input1, input2) with tf.Session() as sess: print sess.run([output], feed_dict={input1:[7.], input2:[2.]}) # 输出 [array([ 14.], dtype=float32)]

七、内核(operation)

我们知道操作是对抽象操作(如matmul 或者add)的一个统称,而内核(kernel)则是能够运行在特定设备(如 CPU、GPU)上的一种对操作的实现。因此,同一个操作可能会对应多个内核。

转载请注明原文地址: https://www.6miu.com/read-2400074.html

最新回复(0)