会话 (Session)
要评估张量,需要实例化一个 tf.Session
对象(非正式名称为会话)。会话会封装 TensorFlow 运行时的状态,并运行 TensorFlow 操作。如果说 tf.Graph
像一个 .py
文件,那么 tf.Session
就像一个 python
可执行对象。
初始化层
层包含的变量必须先初始化,然后才能使用。尽管可以单独初始化各个变量,但也可以轻松地初始化一个 TensorFlow 图中的所有变量(如下所示):
init = tf.global_variables_initializer()
sess.run(init)
global_variables_initializer
仅会初始化创建初始化程序时图中就存在的变量。因此您应该在构建图表的最后一步添加初始化程序。
训练
TensorFlow 提供了执行标准优化算法的优化器。这些优化器被实现为 tf.train.Optimizer
的子类。它们会逐渐改变每个变量,以便将损失最小化。最简单的优化算法是梯度下降法,由 tf.train.GradientDescentOptimizer
实现。它会根据损失相对于变量的导数大小来修改各个变量。例如:
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
该代码构建了优化所需的所有图组件,并返回一个训练指令。该训练指令在运行时会更新图中的变量。您可以按以下方式运行该指令:
for i in range(100):
_, loss_value = sess.run((train, loss))
print(loss_value)
由于 train
是一个指令而不是张量,因此它在运行时不会返回一个值。所以在loss_value前需要加一个“_”,不加会生成如下:
(None, 2.916852)
(None, 2.0571012)
(None, 1.4603394)
(None, 1.0460625)
(None, 0.75840867)
(None, 0.55861694)
(None, 0.41979232)
(None, 0.3232723)
(None, 0.25610784)
(None, 0.20931378)
(None, 0.17665541)
(None, 0.15380664)
(None, 0.13776559)
(None, 0.1264495)
(None, 0.11841298)
(None, 0.11265323)
(None, 0.1084744)
为了查看训练期间损失的进展,我们会同时运行损失张量,生成如下所示的输出值: