4.4 实例19:图的基本操作
前面接触了一些图的概念,这里来系统的了解一下TensorFlow中的图可以做哪些事情。
案例描述
- 演示使用三种方式来建立图,并依次设置为默认图,使用get_default_graph方法来获取当前默认图,验证默认图的设置生效。
- 演示获取图中相关内容的操作。
一个TensorFlow程序是默认建立一个图的,除了系统自动建图以外,还可以手动建立,并做一些其他的操作。
4.4.1 建立图
可以在一个TensorFlow中手动建立其他的图,也可以根据图里面的变量获得当前的图。
下面代码中演示了:使用tf.Graph()建立图,使用tf.get_default_graph()获得图,还有使用reset_default_graph()来重置图。
代码4-14 图的基本操作
上面代码运行结果如下显示:
可以看出,
(1)c是在刚开始的默认图中建立的,所以它的图的打印值就是原始的默认图的打印值923CCF8,
(2)后来使用tf.Graph()建立了一个图B854940,并且在新建的图里添加变量,可以通过变量的“.graph”获得所在的图。
(3)在新图B854940的作用域外,使用tf.get_default_graph()又获得了原始的默认图923CCF8。接着又使用了tf.reset_default_graph()函数,它相当于从新建了一张图来代替原来的默认图,这时默认的图变成了B8546D8。
4.4.2 获取张量
在图里面可以通过名字得到其对应的元素,例如,get_tensor_by_name可以获得图里面的张量。
在上个实例中添加代码如下。
代码4-14 图的基本操作(续)
该部分代码运行结果如下显示:
常量C1是在一个子图g中建立的。with tf.Graph() as default代码表示使用tf.Graph()来创建一个图,并在其上面定义OP,见代码第5、6行。
接着演示了如何访问该图中的变量:将c1的名字放到get_tensor_by_name里面来反向得到其张量(见代码第20行),通过对t的打印可以看到所得的t就是前面定义的张量c1。
4.4.3 获取操作符
获取操作符(Operation,OP)的方法和获取张量的方法非常类似,使用的方法是get_operation_by_name()。下面将获取张量和获取OP的例子放在一起比较一下,具体见如下代码。
代码4-14 图的基本操作(续)
上面示例中,先将张量及其名字打印出来,然后使用g3图的get_tensor_by_name函数又获得到了该张量,此时test和tensor1是一样的。为了证明这一点,直接把test放到session的run里,发现它也能运行出正确的结果。
上面代码运行后会显示如下信息:
再仔细看上例中的op,通过打印tensor1.op.name的信息,获得了op的名字,然后通过get_operation_by_name获得了相同的op,可以看出op与tensor1之间的对应关系。
4.4.4 获取元素列表
如果想看一下图中的全部元素,可以使用get_operations()来实现。具体代码如下。
代码4-14 图的基本操作(续)
运行后显示如下信息:
由于g里面只有一个常量,所以打印了一条信息。
4.4.5 获取对象
前面是多根据名字来获取元素,还可以根据对象来获取元素。使用tf.Graph.as_graph_element(obj, allow_tensor=True, allow_operation=True)函数,即,传入的是一个对象,返回一个张量或是一个op。该函数具有验证和转换功能,在多线程方面会偶尔用到。举例如下。
代码4-14 图的基本操作(续)
运行输出结果如下:
上述的代码是将自己传进来,返回的仍然是自己,只是名字由c1变成了tt3。
更多章节请购买《深入学习之TensorFlow:入门、原理与进阶实战》
京东购买链接:http://t.cn/Rnx4s8d
关注公众号:相约机器人 图书配套视频在线观看