Tensorflow使用Variable
类表达、更新、存储模型参数。html
Variable
是在可变动的,具备保持性的内存句柄,存储着Tensor
session
运行以前,图中的所有Variable
必须被初始化Variable
的值在sess.run(init)以后就肯定了Tensor
的值要在sess.run(x)以后才肯定Variable
被添加到默认的collection
中
tf.GraphKeys
中包含了全部默认集合的名称,能够经过查看__dict__发现具体集合。python
被收集在名为tf.GraphKeys.
GLOBAL_VARIABLES:global_variablestf.GraphKeys.GLOBAL_VARIABLES
的colletion
中,包含了模型中的通用参数git
tf.GraphKeys.TRAINABLE_VARIABLES:
githubtf.Optimizer默认
只优化tf.GraphKeys.TRAINABLE_VARIABLES
中的变量。
函数 | 集合名 | 意义 |
---|---|---|
tf.global_variables() | GLOBAL_VARIABLES | 存储和读取checkpoints时,使用其中全部变量api 跨设备全局变量集合网络 |
tf.trainable_variables() | TRAINABLE_VARIABLES | 训练时,更新其中全部变量session 存储须要训练的模型参数的变量集合函数 |
tf.moving_average_variables() | MOVING_AVERAGE_VARIABLES |
实用指数移动平均的变量集合spa |
tf.local_variables() | 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
被收集在名为tf.GraphKeys.
UMMARIES
的colletion
中,
Summary
是对网络中Tensor
取值进行监测的一种Operation
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
中。