TensorFlow框架语法-会话

189 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

引言

  • TensorFlow2TensorFlow2 版本代码机制默认采用Eager Execution (动态图执行机制),可以和Python混合在一起写,因为代码比较像Python,比较自然。
  • TensorFlow1TensorFlow1 版本代码的执行主要是基于传统的Graph Execution (静态图执行机制),存在着一定弊端,例如:入门门槛高、调试困难、灵活性差、无法使用Python原生控制语句等等。
  • TensorFlow1.0TensorFlow1.0 版本与 TensorFlow2.0TensorFlow2.0以上版本主要在于执行机制上的不同。
  • TensorFlow2.0TensorFlow2.0 版本建议采用 KerasKeras 高层接口,封装程度更高。

1. TensorFlow概述:

TensorFlowTensorFlowGoogleGoogle 推出的机器学习平台,在 TensorFlowTensorFlow 中,所有的数据都通过张量的形式来表示 从功能的角度,张量可以简单理解为多维数组,通俗理解如下:

  1. 零阶张量表示标量(scalar),也就是一个数
  2. 一阶张量为向量(vector),也就是一维数组
  3. n阶张量可以理解为一个n维数组 张量并没有真正保存数字,它保存的是计算过程

2. 会话(session)

会话拥有并管理Tensorflow程序运行时的所有资源,当所有计算完成之后需要关闭会话帮助系统回收资源(不至于使系统越运行越慢)。

第一种会话模式如下代码所示:(需要主动关闭会话)

注意:会话Session中的S是大写的。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()     # 解决方案:注释tf的引用,换为兼容模式。

# 定义计算图
tens1 = tf.constant([1, 2, 3])

# 创建一个会话
sess = tf.Session()

# 使用这个创建好的会话来得到关心的运算的结果。比如可以调用sess.run(result)
# 来得到张量result的取值
print(sess.run(tens1))

# 关闭会话使得本次运行中使用到的资源可以被释放
sess.close()

第二种会话模式如下代码所示:(不需要主动关闭会话)

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()     # 解决方案:注释tf的引用,换为兼容模式。
node1 = tf.constant(3.0, tf.float32, name='node1')
node2 = tf.constant(4.0, tf.float32, name='node2')
result = tf.add(node1, node2)
# 创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
    # 使用这创建好的会话来计算关心的结果
    print(sess.run(result))
# 不需要再调用Session.close()函数来关闭对话
# 当上下文退出时会话关闭和资源释放也自动完成了

3. 手动生成默认会话:

TensorFlow不会自动生成默认的会话,需要手动指定。当默认的会话被指定之后可以通过tf.Tensor.eval函数来计算一个张量的取值。具体代码演示如下所示:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()     # 解决方案:注释tf的引用,换为兼容模式。
node1 = tf.constant(3.0, tf.float32, name='node1')
node2 = tf.constant(4.0, tf.float32, name='node2')
result = tf.add(node1, node2)


sess = tf.Session()
with sess.as_default():  # 注册成默认
    print(result.eval())

4. 交互式环境下设置默认会话:

在交互式环境下,Python脚本或者Jupyter编辑器下,通过设置默认会话来获得张量的取值更加方便。tf.InteractiveSession使用这个函数会自动将生成的会话注册为默认会话。具体代码演示如下所示:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()     # 解决方案:注释tf的引用,换为兼容模式。
node1 = tf.constant(3.0, tf.float32, name='node1')
node2 = tf.constant(4.0, tf.float32, name='node2')
result = tf.add(node1, node2)

sess = tf.InteractiveSession()   # 定义交互式会话,同时将其注册成当前缺省的会话
print(result.eval())
sess.close()