在TensorFlow中,可以通过变量名称来创建或获取一个变量。通过这种方式,在不同的函数中可以直接通过变量的名称来使用变量,而不需要将变量通过参数的形式传递。其主要由tf.get_variable和tf.variable_scope这两个函数实现。下面分别介绍如何使用这两个函数。
tf.get_variable和tf.Variable用法基本相同,最大的区别在于tf.Variable函数中的变量名称"name="是可选参数。但是对于tf.get_variable函数来说,变量名称是一个必填参数。
下面给出一段代码说明如何通过tf.variable_scope函数来控制tf.get_variable函数获取已经创建过的变量。
# -*- coding: utf-8 -*-
import tensorflow as tf
# 在名字为foo的命名空间内创建名字为v的变量
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0))
# 因为在命名空间为foo中已经存在名字为v的变量,所以以下代码会报错
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1])
# 将reuse设置为True,tf.get_variable将直接获取已经声明的变量
with tf.variable_scope("foo", reuse=True):
v1 = tf.get_variable("v", [1])
print(v == v1) # 输出为True
# 将参数reuse设置为True时,tf.variable_scope将只能获取已经创建过的变量
# 因为在命名空间bar中还没有创建变量v,所以以下代码会报错
with tf.variable_scope("bar", reuse=True):
v = tf.get_variable("v", [1])