TensorFlow基础知识1-计算图

来源:互联网 发布:西安java培训多少钱 编辑:程序博客网 时间:2024/05/22 03:50

什么是计算图?

计算图又被称为是有向图,数据流图。
TensorFlow是一个通过计算图的形式来表述计算的编程系统。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
下图展示了通过TensorBoard画出来的两个向量相加的计算图。
这里写图片描述
(TensorBoard的使用参考我的博客:http://blog.csdn.net/hongxue8888/article/details/69389171)


什么是数据流图(Data Flow Graph)?

数据流图是描述有向图中的数值计算过程。有向图中的节点通常代表数学运算,但也可以表示数据的输入、输出和读写等操作;有向图中的边表示节点之间的某种联系,它负责传输多维数据(Tensors)。图中这些tensors的flow也就是TensorFlow的命名来源。

节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。
这里写图片描述

这里写图片描述

计算图的构造流程:
这里写图片描述

import tensorflow as tfimport numpy as npx_data = np.float32(np.random.rand(2,100))y_data = np.dot([0.1 , 0.2] , x_data) + 0.3b = tf.Variable(tf.zeros([1]))W = tf.Variable(tf.random_uniform([1,2],-1.0,1.0))y = tf.matmul(W,x_data) + bloss = tf.reduce_mean(tf.square(y - y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)

1.inference()-尽可能地构建好图表,满足促使神经网路向前反馈并做出预测的要求。
2.loss()-往inference图表中添加生产损失(loss)所需要的操作(ops)。
3.training()-往损失图表中添加计算并应用梯度(gradients)所需的操作。


计算图的使用

TensorFlow程序一般分为两个阶段:
1、定义计算图中所有的计算。
2、执行计算。

先看这段代码:

a = tf.constant([1.0, 2.0], name="a")print(a.graph is tf.get_default_graph())

输出:true
说明在TensorFlow程序中,系统会自动维护一个默认的计算图,通过tf.get_default_graph方法可以获取当前默认的计算图。

当然,除了使用默认的计算图,可以通过tf.Graph方法来生成新的计算图。注意,不同计算图上的张量和运算都不会共享。以下代码显示了如何在不同计算图上定义和使用变量。

import tensorflow as tfg1 = tf.Graph()with g1.as_default():    v = tf.get_variable("v", [1], initializer = tf.zeros_initializer()) # 设置初始值为0g2 = tf.Graph()with g2.as_default():    v = tf.get_variable("v", [1], initializer = tf.ones_initializer())  # 设置初始值为1with tf.Session(graph = g1) as sess:    tf.global_variables_initializer().run()    with tf.variable_scope("", reuse=True):        print(sess.run(tf.get_variable("v")))with tf.Session(graph = g2) as sess:    tf.global_variables_initializer().run()    with tf.variable_scope("", reuse=True):        print(sess.run(tf.get_variable("v")))

输出:
[ 0.]
[ 1.]

在计算图1中将v初始化为0;在计算图2中将v初始化成为1。可以看到运行不同计算图时,变量v的值也是不一样的。


参考:http://www.jeyzhang.com/tensorflow-learning-notes.html