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_variablestf.GraphKeys.GLOBAL_VARIABLES
的colletion
中,包含了模型中的通用参数
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 |
除了上表中的函数外,还可以使用tf.get_collection(集合名)获取集合中的变量。
Summary
Summary
被收集在名为tf.GraphKeys.
UMMARIES
的colletion
中,
Summary
是对网络中Tensor
取值进行监测的一种Operation
- 这些操作在图中是“外围”操作,不影响数据流本身
- 调用tf.scalar_summary系列函数时,就会向默认的
collection
中添加一个Operation
自定义集合
除了默认的集合,我们也可以自己创造collection
组织对象。网络损失就是一类适宜对象。
tensorflow中的Loss提供了许多创建损失Tensor
的方式。
扫描二维码关注公众号,回复:
173077 查看本文章
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
中。