修改对于initializer和variable的描述,增加实战代码。

This commit is contained in:
shuaiwei 2018-11-21 16:06:18 +08:00
parent c4136bd364
commit f45d49205d
1 changed files with 25 additions and 2 deletions

View File

@ -209,11 +209,34 @@ with tf.Session() as sess:
#### 2. variable
  在对机器学习模型进行训练时我们需要不断调整模型的状态这个状态就由variable来保存。创建variable时我们需要给一个初始值。
&emsp;&emsp;无论是传统的机器学习算法例如线性支持向量机Support Vector Machine, SVM)其数学模型为y = <w,x> + b还是更先进的深度学习算法例如卷积神经网络Convolutional Neural Network CNN单个神经元输出的模型y = w*x + b。可以看到w和b就是我们要求的模型模型的求解是通过优化算法对于SVM使用
SMO[1]算法对于CNN一般基于梯度下降法来一步一步更新w和b的值直到满足停止条件。因此大多数机器学习的模型中的w和b实际上是以变量的形式出现在代码中的这就要求我们在代码中定义模型变量。
```
import tensorflow as tf
a = tf.Variable(2.)
b = tf.Variable(3.)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) #变量初始化
print(sess.run(a*b))
[out]:6.
```
[1] Platt, John. "Sequential minimal optimization: A fast algorithm for training support vector machines." (1998).
#### 3. initializer
&emsp;&emsp;每次启动图都需要初始化变量,虽然在创建变量时指定了初始值,但我们还是需要先运行一下初始化节点。使用未初始化的节点进行计算会产生异常。
&emsp;&emsp;由于tensorflow构建的是静态的计算流图在开启会话之前所有的操作都不会被执行。因此为了执行在计算图中所构建的赋值初始化计算节点需要在开启会话之后在会话环境下运行初始化。如果计算图中定义了变量而会话环境下为执行初始化命令则程序报错代码如下
```
import tensorflow as tf
a = tf.Variable(2.)
b = tf.Variable(3.)
with tf.Session() as sess:
#sess.run(tf.global_variables_initializer()) #注释掉初始化命令
print(sess.run(a*b))
[Error]: Attempting to use uninitialized value Variable
```
### 2.启动图