更新时间:2019年07月26日 11时16分53秒 来源:黑马程序员论坛
TensorFlow TensorFlow是Google的一个开源软件库,广泛用于数值计算。它使用可在许多不同平台上共享和执行的数据流图。 它被广泛用于构建深度学习模型,这是机器学习的一个子集。张量只不过是一个多维数组,所以当我们说TensorFlow时,它实际上是计算图中的多维数组(张量)流。安装Anaconda后,安装TensorFlow变得非常简单,直接安装tensorflow也非常简单。无论您使用何种平台,都可以通过键入以下命令轻松安装tensorflow。 conda install -c conda-forge tensorflow 或 pip install --user tensorflow pip3 install --user tensorflow 如需GPU支持,需要-gpu。 运行以下hello world程序即可检查成功的tensorflow安装。 import warnings warnings.filterwarnings('ignore') import tensorflow as tf hello = tf.constant("Hello World") sess = tf.Session() print(sess.run(hello)) 显示结果如下: b'Hello World' 变量Variables、常量Constants、占位符Placeholders 变量,常量,占位符是TensorFlow的基本要素。 但是,这三者之间总是存在混淆。 让我们逐个看到每个元素,并了解它们之间的区别。 变量 变量是用于存储值的容器。 变量将用作计算图中其他几个操作的输入。 我们可以使用tf.Variable()函数创建tensorflow变量。 在下面的示例中,我们使用随机正态分布中的值定义变量,并将其命名为权重。 weights = tf.Variable(tf.random_normal([8, 9], stddev=0.1), name="weights") 但是,在定义变量之后,我们需要使用tf.global_variables_initializer()方法显式创建初始化操作,该方法将为变量分配资源。 常量 常量与变量不同,它们的值不能改变。 它们被分配了值,它们无法在整个过程中更改。 我们可以创建常量使用tf.constant()函数。 x = tf.constant(666) 占位符 将占位符视为一个变量,您只需定义类型和维度不分配价值。 占位符定义为没有值。 占位符的值将在运行时提供。 占位符有一个名为shape的可选参数指定数据的维度。 如果形状设置为none,那么我们可以提供任何数据运行时的大小。 可以使用tf.placeholder()函数定义占位符 x = tf.placeholder("float", shape=None) 简单来说,我们使用tf.variable来存储数据,使用tf.placeholder来提供外部数据。 计算图(ROS中也有这个概念)Computation Graph TensorFlow中的所有内容都将表示为由节点和边组成的计算图,其中节点是数学运算,例如加法,乘法等。边是张量。 计算图在优化资源方面非常有效,并且还促进了分布式计算。 假设我们有节点B,其输入依赖于节点A的输出,这种类型的依赖性称为直接依赖: A = tf.multiply(8,5) B = tf.multiply(A,1) 当节点B不依赖于节点A进行输入时,它被称为间接依赖: A = tf.multiply(8,5) B = tf.multiply(4,3) 因此,如果我们能够理解这些依赖关系,我们就可以在可用资源中分配独立计算并减少计算时间。 每当我们导入tensorflow时,将自动生成默认图形,并且我们创建的所有节点都将与默认图形相关联。 会话Sessions 只会定义计算图,为了执行计算图,我们使用tensorflow会话。 sess = tf.Session()我们可以使用tf.Session()方法为我们的计算图创建会话,该方法将分配用于存储变量当前值的内存。 创建会话后,我们可以使用sess.run()方法执行我们的图形。 为了在tensorflow中运行任何东西,我们需要为一个实例启动tensorflow会话,看下面的代码: import tensorflow as tf a = tf.multiply(2,3) print(a) 输出: Tensor("Mul_4:0", shape=(), dtype=int32) 它将打印tensorflow对象而不是6。因为如前所述,每当我们导入tensorflow时,将自动创建默认计算图,并且我们创建的所有节点将附加到图上。 为了执行图形,我们需要初始化tensorflow会话,如下所示: import tensorflow as tf a = tf.multiply(2,3) #create tensorflow session for executing the session with tf.Session() as sess: #run the session print(sess.run(a)) 输出: 6 综合到一个示例中: import warnings warnings.filterwarnings('ignore') import tensorflow as tf hello = tf.constant("Hello World") sess = tf.Session() print(sess.run(hello)) a = tf.multiply(6,8) print(a) #create tensorflow session for executing the session with tf.Session() as sess: #run the session print(sess.run(a)) b'Hello World' Tensor("Mul:0", shape=(), dtype=int32) 48 ![]() TensorBoard TensorBoard是tensorflow的可视化工具,可用于可视化计算图。 它还可用于绘制各种中间计算的各种定量指标和结果。 使用TensorBoard,我们可以轻松地可视化复杂的模型,这对于调试和共享非常有用。 现在让我们构建一个基本的计算图并在tensorboard中可视化。 首先,让我们导入库: import tensorflow as tf 接下来,我们初始化变量: a = tf.constant(5) b = tf.constant(4) c = tf.multiply(a,b) d = tf.constant(2) e = tf.constant(3) f = tf.multiply(d,e) g = tf.add(c,f) 现在,我们将创建一个tensorflow会话,我们将使用tf.summary.FileWriter()将我们的图形结果写入称为事件文件的文件: with tf.Session() as sess: writer = tf.summary.FileWriter("logs", sess.graph) print(sess.run(g)) writer.close() 输出: 26 要运行tensorboard,请转到终端,找到工作目录并键入: tensorboard --logdir=logs --port=6003 ![]() 添加范围Adding Scope 范围用于降低复杂性,并通过将相关节点分组在一起来帮助更好地理解模型。例如,在上面的示例中,我们可以将图分解为两个不同的组,称为计算和结果。 如果你看一下前面的例子,我们可以看到节点,a到e执行计算,节点g计算结果。 因此,我们可以使用范围单独对它们进行分组以便于理解。 可以使用tf.name_scope()函数创建范围。 with tf.name_scope("Computation"): a = tf.constant(5) b = tf.constant(4) c = tf.multiply(a,b) d = tf.constant(2) e = tf.constant(3) f = tf.multiply(d,e) with tf.name_scope("Result"): g = tf.add(c,f) 如果您看到计算范围,我们可以进一步细分为单独的部分,以便更好地理解。 假设我们可以创建作为第1部分的范围,其具有节点a到c,范围作为第2部分,其具有节点d到e,因为第1部分和第2部分彼此独立。 with tf.name_scope("Computation"): with tf.name_scope("Part1"): a = tf.constant(5) b = tf.constant(4) c = tf.multiply(a,b) with tf.name_scope("Part2"): d = tf.constant(2) e = tf.constant(3) f = tf.multiply(d,e) 通过在tensorboard中对它们进行可视化,可以更好地理解范围。 完整代码如下所示: with tf.name_scope("Computation"): with tf.name_scope("Part1"): a = tf.constant(5) b = tf.constant(4) c = tf.multiply(a,b) with tf.name_scope("Part2"): d = tf.constant(2) e = tf.constant(3) f = tf.multiply(d,e) with tf.name_scope("Result"): g = tf.add(c,f) with tf.Session() as sess: writer = tf.summary.FileWriter("logs", sess.graph) print(sess.run(g)) writer.close() 全部示例如下: import tensorflow as tf with tf.name_scope("Computation"): with tf.name_scope("Part1"): a = tf.constant(5) b = tf.constant(4) c = tf.multiply(a,b) with tf.name_scope("Part2"): d = tf.constant(2) e = tf.constant(3) f = tf.multiply(d,e) with tf.name_scope("Result"): g = tf.add(c,f) with tf.Session() as sess: writer = tf.summary.FileWriter("logs", sess.graph) print(sess.run(g)) writer.close() 使用:tensorboard --logdir=logs --port=6003 在浏览器复制如下地址:TensorBoard 1.13.1 at http://TPS2:6003 (Press CTRL+C to quit) 不同系统会有差异。 ![]() --------------------- 扩展阅读:
|