本文是《TensorFlow从浅入深》系列之第8篇
TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)
TensorFlow从浅入深系列之二 -- 教你通过思维导图深度理解深层神经网络
TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别
TensorFlow从浅入深系列之四 -- 教你深入理解过拟合问题(正则化)
TensorFlow从浅入深系列之五 -- 教你详解滑动平均模型
TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)
TensorFlow从浅入深系列之七 -- 教你使用验证数据集判断模型效果
tf.variable_scope函数主要作用:
- 控制tf.get_variable执行的功能(博文TensorFlow函数之tf.get_variable()和tf.get_variable_scope()有详细介绍)
- 提了一个管理变量命名空间的方式(本篇着重介绍此作用)
tf.variable_scope函数生成的上下文管理器会创建一个TensorFlow中的命名空间,在命名空间内创建的变量名称都会带上这个命名空间名作为前缀。
下边代码来显示如何通过tf.variable_scope来管理变量的名称。
import tensorflow as tf
with tf.variable_scope("foo"):
with tf.variable_scope("bar"):
v3 = tf.get_variable('v', [1])
print(v3.name) # 输出为foo/bar/v:0。命名空间可以嵌套,同时变量的名称也会加入所有命名空间的名称作为前缀。
v4 = tf.get_variable('v1', [1])
print(v4.name) # 输出为foo/v1:0。当命名空间退出之后,变量名称也就不会再被加入其前缀了
# 创建一个名称为空的命名空间,并设置reuse=True
with tf.variable_scope('', reuse=True):
# 可以直接通过带命名空间名称的变量名来获取其他命名空间下的变量。比如这里通过制定名称foo/bar/v来获取
# 在命名空间foo/bar中创建的变量
v5 = tf.get_variable('foo/bar/v', [1])
print(v5 == v3) # 输出为True
v6 = tf.get_variable('foo/v1', [1])
print(v6 == v4) # 输出为True