1. Tensorflow 中有4种类型:tensor(张量), op(操作),Variables(变量), graph(图). tensorflow是以图来表示计算的系统。op是graph中的节点,tensor作为op的输入输出。Variables(变量)维持了图执行过程中的状态信息
2. 在编程时,一般分为两个阶段:1)图构建;2)执行图。 后者是在session(会话)中载入graph,通过op来驱动计算。
3. 在运行时,TensorFlow 上通过一个“翻译”过程,将定义的图转化为不同的可用计算资源间实现分布计算的操作,如cpu,GPU。
4. 一个 tensor包含一个静态类型 rank, 和一个 shape.
5. Value op 有 constant, sequence, random等类型。
6. Variables代表一个可修改的tensor,可作为op的输入。通常将一些训练时的统计值、模型参数等用Variables来表达。
7. Tensorflow是基于图的计算,为了debug,你无法在你的代码中直接print变量,因为这些代码往往都是在构建图,而不是执行。为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果,可以取回多个 tensor。
8. Tensorflow 还提 供给 (feed) 机制, 该机制可临时替代图中的任意操作中的 tensor, 并只在调用的时候有效。它是使用tf.placeholder()为这些操作创建占位符。比如在训练CNN时使用feed来实现读图片,即先tf.placeholder一个位置,然后在循环读图片时,run(feed_dict={the_output_image, tf.placeholder(dtype=tf.string): image_data})
9. Tensorflow把图的构建放在python等各种容易开发的语言里做,而把全部图的高密集计算放在python外做。
10. 通过SummaryWriter可以对graph进行序列化,并在tensorboard可视化,从而对你的graph有个全局到细节的掌控。
11. 通过tf.Summary进行变量存储和统计,通过SummaryWriter和tensorboard进行可视化。
写一个简单的sample code作为上述例子
import tensorflow as tf
import random
print "test basic"
a1 = tf.constant([[3., 3.]])
a2 = tf.constant([[2.,],[1.,]])
p = tf.matmul(a1, a2)
state = tf.Variable(13, name="counter")
init_op = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_op)
result1 = sess.run(a1)
result2 = sess.run(a2)
result3 = sess.run(p)
for _ in range(10):
result4 = sess.run(state.assign_add(1))
print result1, result2, result3, result4
#test fetch
print ("test fetch")
with tf.Session() as sess:
result = sess.run([a1, p])
print result
#test placeholder
print ("test placeholder")
plh = tf.placeholder(dtype=tf.int32)
plhr = tf.add (plh, 2)
with tf.Session() as sess:
print sess.run (plhr, feed_dict={plh:1})
#test save and restore
saver = tf.train.Saver()
init_op = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_op)
save_path = saver.save(sess, "/tmp/model.ckpt")
state2 = tf.Variable(0, name="counter")
restorer = tf.train.Saver()
with tf.Session() as sess:
restorer.restore(sess, "/tmp/model.ckpt")
print sess.run(state2)
#test visualize
summ = tf.Summary()
summ.value.add(tag='testsum', simple_value=111)
with tf.Session() as sess:
sess.run(init_op)
writer = tf.train.SummaryWriter("/tmp/modelvis", sess.graph)
for global_step in range(50):
cnt = sess.run (state.assign_add(random.randint(1,100)))
tmp_summ = tf.Summary()
tmp_summ.value.add(tag="sess_res", simple_value = cnt.item())
writer.add_summary (tmp_summ, global_step)