TensorFlow Ops
一般流程:
TFboy基操:
- 定义图
- 创建writer,两种方式- tf.get_default_graph()
- sess.graph
 
- 创建session执行图
- 关闭writer
- TensorBoard可视化
| 1 | import tensorflow as tf | 
writer会将图(包含的各种ops)以日志文件的形式写入指定目录,tensorboard可以将这些文件可视化出来
上面的程序每跑一次就会产生一个日志文件,不用的日志及时删除
| 1 | tensorboard --logdir='./graphs/low' --port=6006 | 
 
没记住的
| 1 | tf.fill([2,3],8) ===> [[8,8,8],[8,8,8]] | 
变量
变量定义
训练中需要更新的参数定义为变量
常量存储在图中,变量则可能在parameter server上
常量占了很多存储时,加载图会很慢
| 1 | # old way | 
变量初始化
| 1 | #一次性初始化所有变量 | 
变量的值
| 1 | # 两种方式 | 
变量赋值
| 1 | # 赋值会完成初始化的工作 | 
控制依赖
| 1 | # g has 5 ops: a,b,c,d,e | 
数据导入
- old way:placeholders and feed_dict - 例如,对于f(x,y) = 2x + y,x y 就是真实值的占位符 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- #shape=None 意味着接收任意shape的张量 
 tf.placeholder(dtype,shape=None,name=None)
 #any tensors that are feedable can be fed
 tf.Graph.is_feedable(tensor)
 #feed_dict可以用来测试模型,
 #直接传入某些值免去了大量的计算
 a = tf.add(2, 5)
 b = tf.multiply(a, 3)
 with tf.Session() as sess:
 print(sess.run(b)) # >> 21
 # compute the value of b given the value of a is 15
 print(sess.run(b, feed_dict={a: 15})) # >> 45
- new way: tf.data - [ ] todo… 
lazy loading
需要计算op的时候才创建
因为训练绝大数情况都要计算多次,所以lazy loading会产生大量的冗余节点
解决办法:
- 尽可能的将ops的定义和计算分开(不要在计算的时候创建op
- 当你将相关ops组合在一起(比如,1中的步骤在一个类里面)可以使用python的@property机制确保某些功能只执行一次(!!!有待研究)