Variable

Tensorflow使用Variable类表达、更新、存储模型参数。

  • Variable是在可变更的,具有保持性的内存句柄,存储着Tensor
  • 在整个session运行之前,图中的全部Variable必须被初始化
    • Variable的值在sess.run(init)之后就确定了
    • Tensor的值要在sess.run(x)之后才确定
  • 创建的Variable被添加到默认的collection

tf.GraphKeys中包含了所有默认集合的名称,可以通过查看__dict__发现具体集合。

tf.GraphKeys.GLOBAL_VARIABLES:global_variables被收集在名为tf.GraphKeys.GLOBAL_VARIABLEScolletion中,包含了模型中的通用参数

tf.GraphKeys.TRAINABLE_VARIABLES:tf.Optimizer默认只优化tf.GraphKeys.TRAINABLE_VARIABLES中的变量。

函数 集合名 意义
tf.global_variables() GLOBAL_VARIABLES

存储和读取checkpoints时,使用其中所有变量

跨设备全局变量集合

tf.trainable_variables() TRAINABLE_VARIABLES

训练时,更新其中所有变量

存储需要训练的模型参数的变量集合

tf.moving_average_variables() MOVING_AVERAGE_VARIABLES

ExponentialMovingAverage对象会生成此类变量

实用指数移动平均的变量集合

tf.local_variables() LOCAL_VARIABLES

global_variables()之外,需要用tf.init_local_variables()初始化

进程内本地变量集合

tf.model_variables() MODEL_VARIABLES

Key to collect model variables defined by layers.

进程内存储的模型参数的变量集合

  QUEUE_RUNNERS 并非存储variables,存储处理输入的QueueRunner
  SUMMARIES 并非存储variables,存储日志生成相关张量

除了上表中的函数外(上表中最后两个集合并非变量集合,为了方便一并放在这里),还可以使用tf.get_collection(集合名)获取集合中的变量,不过这个函数更多与tf.get_collection(集合名)搭配使用,操作自建集合。

另,slim.get_model_variables()与tf.model_variables()功能近似。

Summary

Summary被收集在名为tf.GraphKeys.UMMARIEScolletion中,

  • Summary是对网络中Tensor取值进行监测的一种Operation
  • 这些操作在图中是“外围”操作,不影响数据流本身
  • 调用tf.scalar_summary系列函数时,就会向默认的collection中添加一个Operation

自定义集合

除了默认的集合,我们也可以自己创造collection组织对象。网络损失就是一类适宜对象。

tensorflow中的Loss提供了许多创建损失Tensor的方式。

x1 = tf.constant(1.0)
l1 = tf.nn.l2_loss(x1) x2 = tf.constant([2.5, -0.3])
l2 = tf.nn.l2_loss(x2)

创建损失不会自动添加到集合中,需要手工指定一个collection

tf.add_to_collection("losses", l1)
tf.add_to_collection("losses", l2)

创建完成后,可以统一获取所有损失,losses是个Tensor类型的list:

losses = tf.get_collection('losses')

一种常见操作把所有损失累加起来得到一个Tensor

loss_total = tf.add_n(losses)

执行操作可以得到损失取值:

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
losses_val = sess.run(losses)
loss_total_val = sess.run(loss_total)

实际上,如果使用TF-Slim包的losses系列函数创建损失,会自动添加到名为”losses”的collection中。

『TensorFlow』使用集合collection控制variables的更多相关文章

  1. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

  2. 『TensorFlow』流程控制

    『PyTorch』第六弹_最小二乘法对比PyTorch和TensorFlow TensorFlow 控制流程操作 TensorFlow 提供了几个操作和类,您可以使用它们来控制操作的执行并向图中添加条 ...

  3. 『TensorFlow』滑动平均

    滑动平均会为目标变量维护一个影子变量,影子变量不影响原变量的更新维护,但是在测试或者实际预测过程中(非训练时),使用影子变量代替原变量. 1.滑动平均求解对象初始化 ema = tf.train.Ex ...

  4. 『TensorFlow』梯度优化相关

    tf.trainable_variables可以得到整个模型中所有trainable=True的Variable,也是自由处理梯度的基础 基础梯度操作方法: tf.gradients 用来计算导数.该 ...

  5. 『TensorFlow』SSD源码学习_其一:论文及开源项目文档介绍

    一.论文介绍 读论文系列:Object Detection ECCV2016 SSD 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层feature map 多层feat ...

  6. 『TensorFlow』模型保存和载入方法汇总

    『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...

  7. 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理

    Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...

  8. 『TensorFlow』分布式训练_其三_多机分布式

    本节中的代码大量使用『TensorFlow』分布式训练_其一_逻辑梳理中介绍的概念,是成熟的多机分布式训练样例 一.基本概念 Cluster.Job.task概念:三者可以简单的看成是层次关系,tas ...

  9. 『TensorFlow』DCGAN生成动漫人物头像_下

    『TensorFlow』以GAN为例的神经网络类范式 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 『TensorFlow』通过代码理解gan网络_中 一.计算 ...

随机推荐

  1. dbgrid 无法显示表中所有字段

    有时表中字段有更新,dbgrid无法显示表中字段. 解决办法: 1.adoquery断开 2. dbgrid字段全部删除 3.adoquery打开 4.dbgrid选择全部字段

  2. numactl 修改 非统一内存访问架构 NUMA(Non Uniform Memory Access Architecture)模式

    当今数据计算领域的主要应用程序和模型可大致分为三大类: (1)联机事务处理(OLTP). (2)决策支持系统(DSS) (3)企业信息通讯(BusinessCommunications) 上述三类系统 ...

  3. sql server自定义排序

    方法一: 比如需要对SQL表中的字段NAME进行如下的排序:张三(Z)李四(L)王五(W)赵六(Z) 按照sql中的默认排序规则,根据字母顺序(a~z)排,结果为:李四  王五 赵六 张三 自定义排序 ...

  4. python中的双冒号作用

    Python序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略. 1. range(n)生成[0,n)区间整数 2. 开始start省略时,默认从第0项开始 3. 结尾省略的时候,默认 ...

  5. HBase 笔记2

    Hadoop 服务启动顺序: zookeeper ->journalnode->namenode -> zkfc -> datanode HBase Master WEB控制台 ...

  6. property装饰器以及多态

    property是一种特殊的属性 访问它时执行一段功能然后返回值 class People: def __init__(self, name): self.__name = name @propert ...

  7. kmp匹配详解

    字符串算法都是毒瘤的 一.kmp算法的用处 在文本串中查找模式串的位置,数量 文本串:要在这个字符串查找模式串 模式串:在文本串中查找的字符串 全是废话 二.kmp算法的思想 话说kmp好像是3个发明 ...

  8. 4. Dubbo原理解析-代理之接口定义 (转)

    转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 一:ProxyFactory的接口定义 impo ...

  9. opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点

    一.简介 二.画出每个轮廓的每个点 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src= ...

  10. TypeError: Cannot read property 'length' of null

    本文为博主原创,未经允许不得转载: 异常展示: [Vue warn]: Error in getter for watcher "filterAndSortData": " ...