变量

到目前为止,我们已经看到了如何创建各种张量对象:常量,操作和占位符。在使用 TensorFlow 构建和训练模型时,通常需要将参数值保存在可在运行时更新的内存位置。该内存位置由 TensorFlow 中的变量标识。

在 TensorFlow 中,变量是张量对象,它们包含可在程序执行期间修改的值。

虽然tf.Variable看起来与tf.placeholder类似,但两者之间存在细微差别:

tf.placeholder tf.Variable
tf.placeholder定义了不随时间变化的输入数据 tf.Variable定义随时间修改的变量值
tf.placeholder在定义时不需要初始值 tf.Variable在定义时需要初始值

在 TensorFlow 中,可以使用tf.Variable()创建变量。让我们看一个带有线性模型的占位符和变量的示例:

  1. 我们将模型参数wb分别定义为具有[.3][-0.3]初始值的变量:
w = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
  1. 输入x定义为占位符,输出y定义为操作:
x = tf.placeholder(tf.float32)
y = w * x + b
  1. 让我们打印wvxy,看看我们得到了什么:
print("w:",w)
print("x:",x)
print("b:",b)
print("y:",y)

我们得到以下输出:

w: <tf.Variable 'Variable:0' shape=(1,) dtype=float32_ref>
x: Tensor("Placeholder_2:0", dtype=float32)
b: <tf.Variable 'Variable_1:0' shape=(1,) dtype=float32_ref>
y: Tensor("add:0", dtype=float32)

输出显示x是占位符张量,y是操作张量,而wb是形状(1,)和数据类型float32的变量。

在 TensorFlow 会话中使用变量之前,必须先初始化它们。您可以通过运行其初始化程序操作来初始化单个变量。

例如,让我们初始化变量w

tfs.run(w.initializer)

但是,在实践中,我们使用 TensorFlow 提供的便利函数来初始化所有变量:

tfs.run(tf.global_variables_initializer())

您还可以使用tf.variables_initializer()函数来初始化一组变量。

也可以通过以下方式调用全局初始化程序便利函数,而不是在会话对象的run()函数内调用:

tf.global_variables_initializer().run()

在初始化变量之后,让我们运行我们的模型来给出 x = [1,2,3,4]的值的输出:

print('run(y,{x:[1,2,3,4]}) : ',tfs.run(y,{x:[1,2,3,4]}))

我们得到以下输出:

run(y,{x:[1,2,3,4]}) :  [ 0\.          0.30000001  0.60000002  0.90000004]

results matching ""

    No results matching ""