From f45d49205d004d9eab11fddd3e1efd256236ce65 Mon Sep 17 00:00:00 2001 From: shuaiwei Date: Wed, 21 Nov 2018 16:06:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=B9=E4=BA=8Einitializer?= =?UTF-8?q?=E5=92=8Cvariable=E7=9A=84=E6=8F=8F=E8=BF=B0=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AE=9E=E6=88=98=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../第十二章_网络搭建及训练.md | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/ch12_网络搭建及训练/第十二章_网络搭建及训练.md b/ch12_网络搭建及训练/第十二章_网络搭建及训练.md index bff068d..05301c2 100644 --- a/ch12_网络搭建及训练/第十二章_网络搭建及训练.md +++ b/ch12_网络搭建及训练/第十二章_网络搭建及训练.md @@ -209,11 +209,34 @@ with tf.Session() as sess: #### 2. variable -  在对机器学习模型进行训练时,我们需要不断调整模型的状态,这个状态就由variable来保存。创建variable时我们需要给一个初始值。 +  无论是传统的机器学习算法,例如线性支持向量机(Support Vector Machine, SVM),其数学模型为y = + 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 -  每次启动图都需要初始化变量,虽然在创建变量时指定了初始值,但我们还是需要先运行一下初始化节点。使用未初始化的节点进行计算会产生异常。 +  由于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.启动图