在前面的文章中,我们已经完成了AI基础环境的搭建(见文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基础环境),以及初步了解了TensorFlow的特点和基本操作(见文章:快速掌握TensorFlow(一)),接下来将继续学习掌握TensorFlow。
本文主要是学习掌握TensorFlow的计算图、会话操作。
计算图是TensorFlow的核心概念,使用图(Graph)来表示计算任务,由节点和边组成。TensorFlow由前端负责构建计算图,后端负责执行计算图。
为了执行图的计算,图必须在会话(Session)里面启动,会话将图的操作分发到CPU、GPU等设备上执行。
下面将介绍如何在TensorFlow里面创建会话、图以及基本操作。
1、图(Graph)
TensorFlow Python库已经有一个默认图 (default graph),如果没有创建新的计算图,则默认情况下是在这个default graph里面创建节点和边。
在图里面添加节点非常方便。例如现在要创建这样的计算图,两个张量相加,如下图:
代码如下:
import tensorflow as tf
a=tf.constant([1.0,2.0], name='a')
b=tf.constant([3.0,4.0], name='b')
result = tf.add(a,b)
现在默认图就有了三个节点,两个constant(),和一个add()。
为了真正使两个张量相加并得到结果,就必须在会话里面启动这个图。
2、会话(Session)
要启动计算图,首先要创建一个Session对象。
使用tf.Session()创建会话,调用run()函数执行计算图。如果没有传入任何创建参数,会话构造器将启动默认图。如果要指定某个计算图,则传入计算图参数(如g1),则创建会话方式为tf.Session(graph=g1)创建会话(Session)主要有以下三种方式:
(1)创建一个会话
#启动默认图
sess=tf.Session()
result_value = sess.run(result)
print(result_value)
# ==> [4.0 6.0]
# 任务完成, 关闭会话.
sess.close()
(2) 创建一个会话
Session在使用完后需要关闭以释放资源,除了显式调用close外,也可以使用“with”代码块 来自动完成关闭动作。代码如下:
with tf.Session() as sess:
result_value = sess.run(result)
print(result_value)
# ==> [4.0 6.0]
(3)创建一个默认的会话
sess=tf.Session()
with sess.as_default():
result_value = result.eval()
print(result_value)
当指定默认会话后,可以通过tf.Tensor.eval函数来计算一个张量的取值。
(4)创建一个交互式会话
在交互式环境下(例如IPython),使用设置默认会话的方式来获取张量的取值更加方便,TensorFlow提供了一种在交互式环境下直接构建默认会话的函数:tf.InteractiveSession,该函数会自动将生成的会话注册为默认会话,使用 tf.Tensor.eval()代替 Session.run(),代码如下:
sess= tf.InteractiveSession()
result_value = result.eval()
print(result_value)
sess.close()
3、构建多个计算图
在TensorFlow中可以构建多个计算图,计算图之间的张量和运算是不会共享的,通过这种方式,可以在同个项目中构建多个网络模型,而相互之间不会受影响。
使用tf.Graph()函数构建图,构建多个计算图的方式如下:
# 构建计算图g1
g1=tf.Graph()
with g1.as_default():
# 在计算图g1中定义变量'v',并设置初始值为0。
v=tf.get_variable('v',initializer=tf.zeros_initializer()(shape = [1]))
# 构建计算图g2
g2=tf.Graph()
with g2.as_default():
# 在计算图g2中定义变量'v',并设置初始值微1。
v=tf.get_variable('v',initializer=tf.ones_initializer()(shape = [1]))
# 在计算图g1中读取变量'v'的取值
with tf.Session(graph=g1) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope('',reuse=True):
print(sess.run(tf.get_variable('v')))
# 输出结果[0.]
# 在计算图g2中读取变量'v'的取值
with tf.Session(graph=g2) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope('',reuse=True):
print(sess.run(tf.get_variable('v')))
# 输出结果[1.]。
4、指定运行设备
如果电脑有多个GPU,可以在图、会话中指定要运行的设备
(1)在图中指定运行设备
g=tf.Graph()
# 指定计算运行的设备。
with g.device('/gpu:0'):
result=tf.add(a,b)
(2)在会话中指定运行设备
with tf.Session() as sess:
with tf.device("/gpu:0"):
result=tf.add(a,b)
运行的设备用字符串进行标识,目前支持的设备包括:
- "/cpu:0": 机器的 CPU
- "/gpu:0": 机器的第一个 GPU,如果有的话
- "/gpu:1": 机器的第二个 GPU,以此类推
通过以上介绍,已经了解了图、会话的基本操作,使用图 (graph) 来表示计算任务,使用会话 (Session) 来执行图。
接下来,我们将有更多讲解TensorFlow的精彩内容,敬请期待!
推荐相关阅读
- 【AI实战】快速掌握TensorFlow(一):基本操作
- 【AI实战】快速掌握TensorFlow(二):计算图、会话
- 【AI实战】快速掌握TensorFlow(三):激励函数
- 【AI实战】快速掌握TensorFlow(四):损失函数
- 【AI实战】搭建基础环境
- 【AI实战】训练第一个模型
- 【AI实战】编写人脸识别程序
- 【AI实战】动手训练目标检测模型(SSD篇)
- 【AI实战】动手训练目标检测模型(YOLO篇)
- 【精华整理】CNN进化史
- 大话卷积神经网络(CNN)
- 大话循环神经网络(RNN)
- 大话深度残差网络(DRN)
- 大话深度信念网络(DBN)
- 大话CNN经典模型:LeNet
- 大话CNN经典模型:AlexNet
- 大话CNN经典模型:VGGNet
- 大话CNN经典模型:GoogLeNet
- 大话目标检测经典模型:RCNN、Fast RCNN、Faster RCNN
- 大话目标检测经典模型:Mask R-CNN
- 27种深度学习经典模型
- 浅说“迁移学习”
- 什么是“强化学习”
- AlphaGo算法原理浅析
- 大数据究竟有多少个V
- Apache Hadoop 2.8 完全分布式集群搭建超详细教程
- Apache Hive 2.1.1 安装配置超详细教程
- Apache HBase 1.2.6 完全分布式集群搭建超详细教程
- 离线安装Cloudera Manager 5和CDH5(最新版5.13.0)超详细教程