变量
到目前为止,我们已经看到了如何创建各种张量对象:常量,操作和占位符。在使用 TensorFlow 构建和训练模型时,通常需要将参数值保存在可在运行时更新的内存位置。该内存位置由 TensorFlow 中的变量标识。
在 TensorFlow 中,变量是张量对象,它们包含可在程序执行期间修改的值。
虽然tf.Variable
看起来与tf.placeholder
类似,但两者之间存在细微差别:
tf.placeholder |
tf.Variable |
---|---|
tf.placeholder 定义了不随时间变化的输入数据 |
tf.Variable 定义随时间修改的变量值 |
tf.placeholder 在定义时不需要初始值 |
tf.Variable 在定义时需要初始值 |
在 TensorFlow 中,可以使用tf.Variable()
创建变量。让我们看一个带有线性模型的占位符和变量的示例:
- 我们将模型参数
w
和b
分别定义为具有[.3]
和[-0.3]
初始值的变量:
w = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
- 输入
x
定义为占位符,输出y
定义为操作:
x = tf.placeholder(tf.float32)
y = w * x + b
- 让我们打印
w
,v
,x
和y
,看看我们得到了什么:
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
是操作张量,而w
和b
是形状(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]