tensorflow学习笔记(2)会话

以下内容为博主从《TensorFlow实战Google深度学习框架》一书搬来,为尊重书作者和版权,因此本文属性为“转载”。

资料来源:《TensorFlow实战Google深度学习框架》   郑泽宇 梁博文 顾思宇 著 (第二版) 电子工业出版社


一、概念

会话拥有并管理tensorflow程序运行时的所有资源。所有运算完成之后都需要关闭绘画帮助系统回收资源,否则就可能出现资源泄漏的问题。tensorflow中使用会话的模式有两种。第一种模式需要明确调用会话生成函数和关闭会话函数。第二种可以通过python的上下文管理器来使用会话。

tensorflow不会自动生成默认的会话,需要手动指定。

 

二、详解

以下展示两段代码,通过设置默认会话计算张量的取值。这两段代码是等效的。

第一段代码:

import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
sess = tf.Session()
with sess.as_default():
    print(result.eval())

第二段代码:


import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
sess = tf.Session()
#以下两个命令具有相同的功能
print(sess.run(result))
print(result.eval(session=sess))

以上两段代码,实际上都手动指定了默认会话函数,如第一段代码中的sess.as_default()和第二段代码中的session=sess,这样其实还不是最方便的。那么tensorflow提供了一个函数tf.InteractiveSession来自动设置默认会话函数,这个函数会自动将生成的会话注册为默认会话。通过该函数可以省去将产生的会话注册为默认会话的过程。如下方代码所示:

import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
sess = tf.InteractiveSession()
print(result.eval())

不管是手动设定默认函数(如第一段和第二段代码所示),还是利用tf.InteractiveSession()的方法自动将生成的会话注册为默认会话(如第三段代码所示),都可以通过ConfigProtocol Buffer来配置需要生成的会话。如下方代码所示:

import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
config = tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
print(sess1.run(result))

接下来介绍上一段代码中出现的tf.ConfigProto函数的两个参数。

(一)allow_soft_placement

   allow_soft_placement:布尔型参数,默认为False. 当它为True时,以下任意一个条件成立时,GPU上的运算可以放到CPU上进行:

1.运算无法在GPU上运行

2.没有GPU资源(比如运算被指定在第二个GPU上运行,但是机器只有一个GPU)

3.运算包含对CPU计算结果的引用

 通过将该参数设置为True,当某些运算无法被当前GPU支持时,可以自动调整到CPU上,而不是报错。也可以让程序在拥有不同数量的GPU机器上运行。

(二)log_device_placement

log_device_placement:布尔型参数,设置为True时,日志中将会记录每个节点被安排在哪个设备上以方便调试。而在生产环境中将其设置为False则可以减少日志量。

猜你喜欢

转载自blog.csdn.net/Johnisjohn/article/details/88083569