最近发现Stanford新开了一门课cs20si《Tensorflow for Deep Learning Research》准备好好学习一下。
第一节课主要介绍Tensorflow的一些基本知识。
Note中提出了Tensorflow具有以下重要特种:
- Python API
- 轻便。可以用一个单独的API实现desktop,server以及移动设备上1个或多个CPU/GPU的计算部署。
- 灵活性。Android,windows,iOS,Linux上都可以使用。
- 可视化。提供了TensorBoard
- Checkpoints.
- 自动求导
- 大规模的社区
- 有很多基于Tensorflow的项目
Data Flow Graph
Tensorflow将模型的定义与模型的执行分开,使用Session来进行操作。
tensorflow中并不是将所有计算都先算好,将数据保存下来,而是等到计算的操作出现时,再进行计算。
有API并不清楚,可以通过看源码来了解函数的具体意义
这种data Flow graph的优点在于,可以方便地将graph分为多块,每一块指定不同的cpu/gpu.
可以创建多个graph,但是其实并不需要多个graph,session在默认的graph上运行。
- 多个graph需要多个session,每一个session都会默认请求使用所有的资源
- 多个graph间传递数据,仍需要通过Python/numpy传递,
- 使用一个graph里有多个不连接的subgraph更好。比如可以有多个模型,看哪个模型输出的值更高。
创建新的graph,需要用as_default()函数,否则的话,会在默认的graph中进行计算。通常要将graph作为Default graph。
g = tf.Graph()
with g.as_default():
x = tf.add(3, 5)
sess = tf.Session(graph=g)
http://danijar.com/what-is-a-tensorflow-session/介绍了graph和session的用法
1. graph是用于定义计算的。它并不进行计算,也不存储数据,仅仅定义了一些操作。tensorflow中会创建一个默认的graph。
2. session是用来执行graph或者部分graph。它可以分配资源(在一台或者多台机器上,这些资源存储结果或者变量。可以在多个session中使用同一个graph,这些计算是独立进行的。
a = tf.Variable(1, name="foo")
init = tf.global_variables_initializer()
assign = a.assign(10)
with tf.Session() as sess:
sess.run(init)
print "a=", sess.run(a)
with tf.Session() as sess:
sess.run(init)
sess.run(assign)
print "a=", sess.run(a)
输出为
a=1
a=10