4.4 实例19:图的基本操作
前面接触了一些图的概念,这里来系统的了解一下TensorFlow中的图可以做哪些事情。
案例描述
(1) 演示使用三种方式来建立图,并依次设置为默认图,使用get_default_graph方法来获取当前默认图,验证默认图的设置生效。
(2) 演示获取图中相关内容的操作。
一个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的名字放到get_tensor_by_name里面来反向得到其张量(见代码第20行),通过对t的打印可以看到所得的t就是前面定义的张量c1。
注意:
不必太花精力去关注TensorFlow中默认的命名规则。一般在需要使用名字时,都会在定义的同时为它指定好固定的名字。如果真要不清楚某个元素的名字,将其打印出来,回填到代码中,再次运行即可。
4.4.3 获取操作符
获取操作符(Operation,OP)的方法和获取张量的方法非常类似,使用的方法是get_operation_by_name()。下面将获取张量和获取OP的例子放在一起比较一下,具体见如下代码。
代码4-14 图的基本操作(续)
注意:
使用默认的图时,也可以用上述代码中的tf.get_default_graph()获取当前图,然后接着可以调用get_tensor_by_name获取元素。
上面代码运行后会显示如下信息:
如果想看一下图中的全部元素,可以使用get_operations()来实现。具体代码如下。
代码4-14 图的基本操作(续)
运行后显示如下信息:
4.4.5 获取对象
前面是多根据名字来获取元素,还可以根据对象来获取元素。使用tf.Graph.as_graph_element(obj, allow_tensor=True, allow_operation=True)函数,即,传入的是一个对象,返回一个张量或是一个op。该函数具有验证和转换功能,在多线程方面会偶尔用到。举例如下。
代码4-14 图的基本操作(续)
运行输出结果如下:
上述的代码是将自己传进来,返回的仍然是自己,只是名字由c1变成了tt3。
更多章节请购买《深入学习之 TensorFlow 入门、原理与进阶实战》 全本