人工智能TensorFlow工作笔记009---认识TensorFlow中的会话

    xiaoxiao2023-10-13  163

     技术交流QQ群【JAVA,C,.NET,BigData,AI】:170933152 看书写程序,边看边写... 

    # 前面的两节介绍了Tens orFlow 是如何组织数据和运算的。本节将介绍如何使用 # TensorFlow 中的会话( session )来执行定义好的运算。会话拥有并管理TensorFlow 程序运 # 行时的所有资源。所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现 # 资源泄漏的问题。Te nsorFlow 中使用会话的模式一般有两种,第一种模式需要明确调用会 # 话生成函数和关闭会话函数,这种模式的代码流程如下。 # 创建一个会话。 import tensorflow as tf #sess = tf.Session() #使用这个创建好的会话来得到关心的运算的结果。比如可以调用sess. run (result) , #来得到3.1 节样例中张量result 的取值。 a=tf.constant([1.0,2.0],name="a"); b=tf.constant([2.0,3.0],name="b") result=a+b; #sess.run(result); # print(sess.run(result)) #打印结果 # [3. 5.] #关闭会话使得本次运行巾使用到的资源可以被释放。 # sess.close (); # 使用这种模式时,在所有计算完成之后,需要明确调用Session.close 函数来关闭会话 # 并释放资源。然而,当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导 # 致资源泄漏。为了解决异常退出时资源释放的问题, TensorFlow 可以通过Python 的上下文 # 管理器来使用会话。以下代码展示了如何使用这种模式。 #创建一个会话,并通过Python 中的上下文管理器来管理这个会话。 #使用创建好的会话来计算关心的结果。 # with tf.Session() as sess : # print(sess.run(result)) #打印结果 #[3. 5.] #不需要再调用“ Session.close()”函数来关闭会话, #当上下文退出时会话关闭和资源释放也自动完成了。 # 通过Python 上下文管理器的机制,只要将所有的计算放在“ with ”的内部就可以。当 # 上下文管理器退出时候会自动释放所有资源。这样既解决了因为异常退出时资源释放的问 # 题,同时也解决了忘记调用Session.close 函数而产生的资源泄漏。 # 3.1 节介绍过TensorFlow 会自动生成一个默认的计算图,如果没有特殊指定,运算会自 # 动加入这个计算图中。TensorFlow 中的会话也有类似的机制,但TensorFlow 不会自动生成默 # 认的会话,而是需要手动指定。当默认的会话被指定之后可以通过tf.Tensor.eval 函数来计算 # 一个张量的取值。以下代码展示了通过设定默认会话计算张量的取值。 # sess = tf.Session() # with sess.as_default(): # print(result.eval()) #打印结果: # [3. 5.] # sess = tf. Session() # #以下两个命令有相同的功能。 # print(sess.run(result)) # print(result.eval(session=sess)) #打印结果: # [3. 5.] # [3. 5.] # 在交互式环境下(比如Python 脚本或者Jupyter 的编辑器下),通过设置默认会话的方 # 式来获取张量的取值更加方便。所以TensorFlow 提供了一种在交互式环境下直接构建默认 # 会话的函数。这个函数就是tf.lnteractiveSession 。使用这个函数会自动将生成的会话注册为 # 默认会话。以下代码展示了tf.InteractiveSession 函数的用法。 sess = tf.InteractiveSession() print((result.eval())) sess.close() #打印结果: # [3. 5.] # 通过tf.InteractiveSession 函数可以省去将产生的会话注册为默认会话的过程。无论使 # 用哪种方法都可以通过ConfigProto Protocol BufferCD 来配置需要生成的会话。下面给出了通 # 过ConfigProto 配置会话的方法: config = tf.ConfigProto(allow_soft_placement=True,log_device_placement=True) sess1 = tf.InteractiveSession(config=config) sess2 = tf.Session(config=config) # 通过ConfigProto 可以配置类似并行的线程数、GPU 分配策略、运算超时时间等参数。 # 在这些参数中,最常使用的有两个。第一个是allow_so位_placement ,这是一个布尔型的参 # 数,当它为True 时, 在以下任意一个条件成立时, GPU 上的运算可以放到CPU 上进行: # l. 运算无法在GPU 上执行。 # 2. 没有GPU 资源(比如运算被指定在第二个GPU 上运行,但是机器只有一个GPU ) 。 # 3. 运算输入包含对CPU 计算结果的引用。 # 这个参数的默认值为False ,但是为了使得代码的可移植性更强,在有GPU 的环境下 # 这个参数一般会被设置为True 。不同的GPU 驱动版本可能对计算的支持有略微的区别,通 # 过将allow_soft _placement 参数设为True , 当某些运算无法被当前GPU 支持时,可以自动 # 调整到CPU 上,而不是报错。类似地,通过将这个参数设置为True ,可以让程序在拥有不 # 同数量的GPU 机器上顺利运行。 # 第二个使用得比较多的配置参数是log_device placement o 这也是一个布尔型的参数, # 当它为True 时日志中将会记录每个节点被安排在哪个设备上以方便调试。而在生产环境中 # 将这个参数设置为False 可以减少日志量。 credreamer~夹狗狮 认证博客专家 推荐算法 算法 神经网络 从事10年编程工作,工作涉及到.Net,Java,C等编程语言,爱好领域,算法,人工智能,大数据等领域, 虚心求教,一起进步,credream 创梦 是大学期间想的个词,如今一晃10多年已过....
    最新回复(0)