【深度学习】TensorFlow操作与会话

50 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

1. TensorFlow中常见OP(Operation)

1.1 操作函数

  • 操作函数在运行过程中会产生一个操作对象
  • 在完成了输出后通过返回值把输出的对象返回出来

下面将由两个经典的操作(constant和add)进行详细解释:

  • tf.constant(Tensor对象):创建一个常数操作
  • tf.add(Tensor对象1, Tensor对象2):创建一个加和操作

1.2 操作对象

一个操作对象(Operation)相当于是Tensorflow图中的一个节点,可以接收0-n个输入Tensor,并且可以输出0-n个Tensor,操作对象是由操作函数创建的。

Const操作对象:Const操作对象是由constant操作函数产生的

  • 具体过程为:输入Tensor对象-> Const-> 输出Tensor对象
  • 操作对象是有输入和输出的

Add操作对象:

  • 具体过程为:输入(Tensor对象1,Tensor对象2)-> Add对象-> 输出Tensor对象3

2. 会话

会话相当于是运行TensorFlow中操作的类,包含两种开启方式,如下所示:

  • tf.Session:用于完整的程序当中
  • tf.InteractiveSession:用于交互式上下文中的TensorFlow,比如在终端中

代码演示:下面将在终端中进行演示

  • 打开anaconda prompt
  • 进入tensorflow所在的虚拟环境
  • 在交互式模式下开启会话
In [1]: import tensorflow.compat.v1 as tf
In [2]: tf.InteractiveSession()
In [3]: a = tf.constant(3)
In [4]: a

运行结果如下所示:

Out[4]: <tf.Tensor: shape=(), dtype=int32, numpy=3>

会话可能拥有的资源,如tf.Variabletf.QueueBasetf.ReaderBase。当这些资源不再需要时,释放这些资源非常重要。因此,需要调用tf.Session.close会话中的方法,将session的资源进行回收。或将会话用作上下文管理器。

具体代码演示如下所示:

# 传统会话定义
sess = tf.Session()
sum = sess.run(c)
sess.close

注意:会话掌握资源,用完要记得回收

若想在运行会话时,打印设备信息。可以使用:

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)) as sess:

代码演示如下所示:

def session_demo():
    """
    会话演示
    """
    # TensorFlow实现加法运算
    ten_1 = tf.constant(2)
    ten_2 = tf.constant(3)
    ten_3 = ten_1 + ten_2
    print("TensorFlow加法运算的结果:\n", ten_3)
    
    # 查看默认图
    # 方法1:调用方法
    default_graph = tf.get_default_graph()
    print("default_graph:\n", default_graph)
    
    # 方法2:查看属性
    print("ten_1的图属性:\n", ten_1.graph)
    print("ten_3的图属性:\n", ten_3.graph)
    
    # 开启会话
    with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                         log_device_placement=True)) as sess:
        ten_3_val = sess.run(ten_3)
        print("ten_3_val:\n", ten_3_val)
        print("session的图属性:\n", sess.graph)
        

    return None

session_demo()

运行结果如下图所示:由运行结果图可以看出显示了设备信息,虽然设备未知。

image.png