多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 变量 到目前为止,我们已经看到了如何创建各种张量对象:常量,操作和占位符。在使用 TensorFlow 构建和训练模型时,通常需要将参数值保存在可在运行时更新的内存位置。该内存位置由 TensorFlow 中的变量标识。 在 TensorFlow 中,变量是张量对象,它们包含可在程序执行期间修改的值。 虽然`tf.Variable`看起来与`tf.placeholder`类似,但两者之间存在细微差别: | **`tf.placeholder`** | **`tf.Variable`** | | --- | --- | | `tf.placeholder`定义了不随时间变化的输入数据 | `tf.Variable`定义随时间修改的变量值 | | `tf.placeholder`在定义时不需要初始值 | `tf.Variable`在定义时需要初始值 | 在 TensorFlow 中,可以使用`tf.Variable()`创建变量。让我们看一个带有线性模型的占位符和变量的示例: ![](https://img.kancloud.cn/fb/8b/fb8b77bc51800ca3d1da89547759d26d_1180x200.png) 1. 我们将模型参数`w`和`b`分别定义为具有`[.3]`和`[-0.3]`初始值的变量: ```py w = tf.Variable([.3], tf.float32) b = tf.Variable([-.3], tf.float32) ``` 1. 输入`x`定义为占位符,输出`y`定义为操作: ```py x = tf.placeholder(tf.float32) y = w * x + b ``` 1. 让我们打印`w`,`v`,`x`和`y`,看看我们得到了什么: ```py print("w:",w) print("x:",x) print("b:",b) print("y:",y) ``` 我们得到以下输出: ```py 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`: ```py tfs.run(w.initializer) ``` 但是,在实践中,我们使用 TensorFlow 提供的便利函数来初始化所有变量: ```py tfs.run(tf.global_variables_initializer()) ``` 您还可以使用`tf.variables_initializer()`函数来初始化一组变量。 也可以通过以下方式调用全局初始化程序便利函数,而不是在会话对象的`run()`函数内调用: ```py tf.global_variables_initializer().run() ``` 在初始化变量之后,让我们运行我们的模型来给出 x = [1,2,3,4]的值的输出: ```py print('run(y,{x:[1,2,3,4]}) : ',tfs.run(y,{x:[1,2,3,4]})) ``` 我们得到以下输出: ```py run(y,{x:[1,2,3,4]}) : [ 0\. 0.30000001 0.60000002 0.90000004] ```