剖析TensorFlow中,图的奥秘


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是在一个子图g中建立的。with tf.Graph() as default代码表示使用tf.Graph()来创建一个图,并在其上面定义OP,见代码第5、6行。
接着演示了如何访问该图中的变量:将c1的名字放到get_tensor_by_name里面来反向得到其张量(见代码第20行),通过对t的打印可以看到所得的t就是前面定义的张量c1。
注意:
不必太花精力去关注TensorFlow中默认的命名规则。一般在需要使用名字时,都会在定义的同时为它指定好固定的名字。如果真要不清楚某个元素的名字,将其打印出来,回填到代码中,再次运行即可。
4.4.3  获取操作符
获取操作符(Operation,OP)的方法和获取张量的方法非常类似,使用的方法是get_operation_by_name()。下面将获取张量和获取OP的例子放在一起比较一下,具体见如下代码。

代码4-14  图的基本操作(续)



上面示例中,先将张量及其名字打印出来,然后使用g3图的get_tensor_by_name函数又获得到了该张量,此时test和tensor1是一样的。为了证明这一点,直接把test放到session的run里,发现它也能运行出正确的结果。
注意:
使用默认的图时,也可以用上述代码中的tf.get_default_graph()获取当前图,然后接着可以调用get_tensor_by_name获取元素。

上面代码运行后会显示如下信息:


再仔细看上例中的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 入门、原理与进阶实战》 全本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值