tf.Graph().as_default()
with tf.Graph().as_default():
with tf.device('/gpu:'+str(GPU_INDEX)):
TensorFlow中所有计算都会被转化为计算图上的节点。是一个通过计算图的形式来表述计算的编程系统,每个计算都是计算图的一个节点,而节点之间的边描述了计算之间的依赖关系。
在TensorFlow中,系统会自动维护一个默认的计算图,通过tf.get_default_graph()函数可以获取当前默认的计算图。
如果没有显示创建一个图的话,系统提供一个全局默认的图,默认把所有的操作都添加到全局默认图中,配合with关键词使用,可以只把with快中的操作添加到默认图中。计算图可以通过tf.Graph.device函数来指定运行计算的设备。
如果要用GPU跑的话要确保安装的tensorflow是gpu版本的。可以通过一下方式来判断:
import tensorflow as tf
print(tf.test.is_gpu_available())
#true为有gpu版本
session
# 创建本地 session
with tf.Session() as sess:
# ...
# 创建远程 session
with tf.Session("grpc://example.org:2222"):
# ...
session拥有和管理物理资源CPU、GPU、网络连接的功能,最典型的使用方式是作为上下文管理器使用。session 使用的可选参数主要有三个:target 用来控制 session 使用的硬件设备, 如果使用空值,那么这个 session 就只会使用本地的设备,如果使用 grpc:// URL,那么就会使用这台服务器控制的所有设备。graph 用来控制该 session 运行哪个计算图,如果为空,那么该 session 就只会使用当前的默认 Graph,如果使用多个计算图,就可以在这里指定。config 用来 指定一个 tf.ConfigProto 格式的 session 运行配置,比如说它里面包含的 allow_soft_placement 如果指定为 TRUE,那么 session 就会自动把不适合在 GPU 上运行的 OP 全部放到 CPU 上运行;cluster_def 是分布式运行时候需要指定的配置;gpu_options.allow_growth 设置会使得程序在开始时候逐步的增长 GPU 显存使用量,而不是一开始就最大化的使用所有显存。第一个和第三个配置是经常用到的。
tf.Session.run 是运行 OP 和获取 tensor 的值的主要方式,可以一次性传入多个 OP 和 tensor 给它,然后TensorFlow 会自动执行所有需要的 OP 来得到结果。
tensorflow.placeholder()
placeholder是占位符的意思,在tensorflow中类似于函数参数,在执行的时候再赋具体的值。
Tensorflow的设计理念称之为计算流图,在编写程序时,首先构筑整个系统的graph,代码并不会直接生效,这一点和python的其他数值计算库(如Numpy等)不同,graph为静态的,类似于docker中的镜像。然后,在实际的运行时,启动一个session,程序才会真正的运行。这样做的好处就是:避免反复地切换底层程序实际运行的上下文,tensorflow帮你优化整个系统的代码。我们知道,很多python程序的底层为C语言或者其他语言,执行一行脚本,就要切换一次,是有成本的,tensorflow通过计算流图的方式,帮你优化整个session需要执行的代码,还是很有优势的。placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存。等建立session,在会话中,运行模型的时候通过feed_dict()函数向占位符喂入数据。
tf.summary
tensorboard作为一款可视化神奇,是学习tensorflow时模型训练以及参数可视化的法宝。而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在tensorboard显示。