创造第一个图谱,然后运行它
import tensorflow as tf
x = tf.Variable(3, name="x")
y = tf.Variable(4, name="y")
f = x*x*y + y + 2
这就是它的一切! 最重要的是要知道这个代码实际上并不执行任何计算,即使它看起来像(尤其是最后一行)。 它只是创建一个计算图谱。 事实上,变量都没有初始化.要求出此图,您需要打开一个 TensorFlow 会话并使用它初始化变量并求出f
。TensorFlow 会话负责处理在诸如 CPU 和 GPU 之类的设备上的操作并运行它们,并且它保留所有变量值。以下代码创建一个会话,初始化变量,并求出f
,然后关闭会话(释放资源):
# way1
sess = tf.Session()
sess.run(x.initializer)
sess.run(y.initializer)
result = sess.run(f)
print(result)
sess.close()
不得不每次重复sess.run() 有点麻烦,但幸运的是有一个更好的方法:
# way2
with tf.Session() as sess:
x.initializer.run()
y.initializer.run()
result = f.eval()
print(result)
在with
块中,会话被设置为默认会话。 调用x.initializer.run()
等效于调用tf.get_default_session().run(x.initial)
,f.eval()
等效于调用tf.get_default_session().run(f)
。 这使得代码更容易阅读。 此外,会话在块的末尾自动关闭。
你可以使用global_variables_initializer()
函数,而不是手动初始化每个变量。 请注意,它实际上没有立即执行初始化,而是在图谱中创建一个当程序运行时所有变量都会初始化的节点:
# way3
# init = tf.global_variables_initializer()
# with tf.Session() as sess:
# init.run()
# result = f.eval()
6. # print(result)
在 Jupyter 内部或在 Python shell 中,您可能更喜欢创建一个InteractiveSession
。 与常规会话的唯一区别是,当创建InteractiveSession
时,它将自动将其自身设置为默认会话,因此您不需要使用模块(但是您需要在完成后手动关闭会话):
# way4
init = tf.global_variables_initializer()
sess = tf.InteractiveSession()
init.run()
result = f.eval()
print(result)
sess.close()
TensorFlow 程序通常分为两部分:第一部分构建计算图谱(这称为构造阶段),第二部分运行它(这是执行阶段)。 建设阶段通常构建一个表示 ML 模型的计算图谱,然后对其进行训练,计算。 执行阶段通常运行循环,重复地求出训练步骤(例如,每个小批次),逐渐改进模型参数。