Skip to content

Commit

Permalink
Merge pull request scutan90#211 from SuperWayLiu/master
Browse files Browse the repository at this point in the history
修改对于initializer和variable的描述,增加实战代码。
  • Loading branch information
scutan90 authored Nov 21, 2018
2 parents 96d1322 + f45d492 commit 9ae4be2
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions ch12_网络搭建及训练/第十二章_网络搭建及训练.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.启动图

Expand Down

0 comments on commit 9ae4be2

Please sign in to comment.