• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

tf.GraphKeys简介

Tensorflow admin 3个月前 (04-21) 335次浏览 0个评论 扫描二维码

GraphKeys

tf.GraphKeys包含所有graph collection中的标准集合名,有点像 Python 里的 build-in fuction。

首先要了解graph collection是什么。

graph collection

在官方教程——图和会话中,介绍什么是 tf.Graph是这么说的:

tf.Graph包含两类相关信息:

  • 图结构。图的节点和边缘,指明了各个指令组合在一起的方式,但不规定它们的使用方式。图结构与汇编代码类似:检查图结构可以传达一些有用的信息,但它不包含源代码传达的的所有有用上下文。
  • **图集合。**TensorFlow 提供了一种通用机制,以便在tf.Graph中存储元数据集合。tf.add_to_collection函数允许您将对象列表与一个键相关联(其中tf.GraphKeys定义了部分标准键),tf.get_collection则允许您查询与键关联的所有对象。TensorFlow 库的许多组成部分会使用它:例如,当您创建tf.Variable时,系统会默认将其添加到表示“全局变量(tf.global_variables)”和“可训练变量tf.trainable_variables)”的集合中。当您后续创建tf.train.Savertf.train.Optimizer时,这些集合中的变量将用作默认参数。

也就是说,在创建图的过程中,TensorFlow 的 Python 底层会自动用一些collection对 op 进行归类,方便之后的调用。这部分collection的名字被称为tf.GraphKeys,可以用来获取不同类型的 op。当然,我们也可以自定义collection来收集 op。

常见 GraphKeys

  • GLOBAL_VARIABLES: 该 collection 默认加入所有的Variable对象,并且在分布式环境中共享。一般来说,TRAINABLE_VARIABLES包含在MODEL_VARIABLES中,MODEL_VARIABLES包含在GLOBAL_VARIABLES中。
  • LOCAL_VARIABLES: GLOBAL_VARIABLES不同的是,它只包含本机器上的Variable,即不能在分布式环境中共享。
  • MODEL_VARIABLES: 顾名思义,模型中的变量,在构建模型中,所有用于正向传递的Variable都将添加到这里。
  • TRAINALBEL_VARIABLES: 所有用于反向传递的Variable,即可训练(可以被 optimizer 优化,进行参数更新)的变量。
  • SUMMARIES: 跟 Tensorboard 相关,这里的Variable都由tf.summary建立并将用于可视化。
  • QUEUE_RUNNERS:  队列信息,在 tf 优化中会遇到,正常情况下 io 速度还是相较于 gpu/cpu 慢很多 ,所以为了提升效率异步的方式去处理数据读写和运算 the QueueRunner objects that are used to produce input for a computation.
  • MOVING_AVERAGE_VARIABLES: the subset of Variable objects that will also keep moving averages.
  • REGULARIZATION_LOSSES: 正则化 loss regularization losses collected during graph construction.

 

下面通过一些例子来说明一下这个是如何使用的。

# -*- coding: utf-8 -*-
# @Time    : 2019-04-21 17:59
# @Author  : zhusimaji
# @File    : adadfafaw.py
# @Software: PyCharm
import tensorflow as tf

sess=tf.Session()
a=tf.get_variable("a",[3,3,32,64],initializer=tf.random_normal_initializer())
b=tf.get_variable("b",[64],initializer=tf.random_normal_initializer())
#collections=None 等价于 collection=[tf.GraphKeys.GLOBAL_VARIABLES]
print("I am a:", a)
print("I am b:", b)
print("I am gv:", tf.GraphKeys.GLOBAL_VARIABLES)
gv= tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
          #tf.get_collection(collection_name)返回某个 collection 的列表


print("I am gv:", gv)
for var in gv:
    print("Iam var:",var)
    print(var is a)
    print(var.get_shape())
    print("----------------")

输出结果如下所示:

I am a: <tf.Variable 'a:0' shape=(3, 3, 32, 64) dtype=float32_ref>
I am b: <tf.Variable 'b:0' shape=(64,) dtype=float32_ref>
I am gv: variables
I am gv: [<tf.Variable 'a:0' shape=(3, 3, 32, 64) dtype=float32_ref>, <tf.Variable 'b:0' shape=(64,) dtype=float32_ref>]
Iam var: <tf.Variable 'a:0' shape=(3, 3, 32, 64) dtype=float32_ref>
True
(3, 3, 32, 64)
----------------
Iam var: <tf.Variable 'b:0' shape=(64,) dtype=float32_ref>
False
(64,)
----------------

由上面的定义可以看到这些变量的定义相当于一个集合,只要你在计算图中定义了相关的变量,这些集合默认就会记录你当前所有定义的变量,后续你也可以通过这种方式去获取当前所有变量,甚者你可以在 summary 的时候全部记录下来使用。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明tf.GraphKeys 简介
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!