创造第一个图谱,然后运行它

  1. import tensorflow as tf
  2. x = tf.Variable(3, name="x")
  3. y = tf.Variable(4, name="y")
  4. f = x*x*y + y + 2

这就是它的一切! 最重要的是要知道这个代码实际上并不执行任何计算,即使它看起来像(尤其是最后一行)。 它只是创建一个计算图谱。 事实上,变量都没有初始化.要求出此图,您需要打开一个 TensorFlow 会话并使用它初始化变量并求出f。TensorFlow 会话负责处理在诸如 CPU 和 GPU 之类的设备上的操作并运行它们,并且它保留所有变量值。以下代码创建一个会话,初始化变量,并求出f,然后关闭会话(释放资源):

  1. # way1
  2. sess = tf.Session()
  3. sess.run(x.initializer)
  4. sess.run(y.initializer)
  5. result = sess.run(f)
  6. print(result)
  7. sess.close()

不得不每次重复sess.run() 有点麻烦,但幸运的是有一个更好的方法:

  1. # way2
  2. with tf.Session() as sess:
  3. x.initializer.run()
  4. y.initializer.run()
  5. result = f.eval()
  6. print(result)

with块中,会话被设置为默认会话。 调用x.initializer.run()等效于调用tf.get_default_session().run(x.initial)f.eval()等效于调用tf.get_default_session().run(f)。 这使得代码更容易阅读。 此外,会话在块的末尾自动关闭。

你可以使用global_variables_initializer() 函数,而不是手动初始化每个变量。 请注意,它实际上没有立即执行初始化,而是在图谱中创建一个当程序运行时所有变量都会初始化的节点:

  1. # way3
  2. # init = tf.global_variables_initializer()
  3. # with tf.Session() as sess:
  4. # init.run()
  5. # result = f.eval()
  6. 6. # print(result)

在 Jupyter 内部或在 Python shell 中,您可能更喜欢创建一个InteractiveSession。 与常规会话的唯一区别是,当创建InteractiveSession时,它将自动将其自身设置为默认会话,因此您不需要使用模块(但是您需要在完成后手动关闭会话):

  1. # way4
  2. init = tf.global_variables_initializer()
  3. sess = tf.InteractiveSession()
  4. init.run()
  5. result = f.eval()
  6. print(result)
  7. sess.close()

TensorFlow 程序通常分为两部分:第一部分构建计算图谱(这称为构造阶段),第二部分运行它(这是执行阶段)。 建设阶段通常构建一个表示 ML 模型的计算图谱,然后对其进行训练,计算。 执行阶段通常运行循环,重复地求出训练步骤(例如,每个小批次),逐渐改进模型参数。