一、核心
数据模型:张量;
张量:
n维数据集合,由秩、形状和类型标识。
秩:张量维数(0-标量,1-矢量,2-矩阵);形状:每维长度的列表;类型:tf.float16/32/64,tf.(u)int8/16/32,tf.bool/string
编程模型:数据流图、计算图;
执行模型:初始节点,触发(firing)节点。
二、会话
1.Session与InteractiveSession
InteractiveSession创建的为默认对话,不需要指定会话上下文来确定稍后执行的命令,既不需要with sess或sess.obj.eval()来执行,在with语句中创建、使用会话可确保会话在块执行完时自动关闭。
2.sess.run(tensor/operation)与tensor.eval
eval() 其实就是tf.Tensor的Session.run() 的另外一种写法,但两者有差别
- eval(): 将字符串string对象转化为有效的表达式参与求值运算返回计算结果
- eval()也是启动计算的一种方式。基于Tensorflow的基本原理,首先需要定义图,然后计算图,其中计算图的函数常见的有run()函数,如sess.run()。同样eval()也是此类函数,
- eval()只能用于tf.Tensor类对象,也就是有输出的Operation。对于没有输出的Operation, 可以用.run()或者Session.run();Session.run()没有这个限制。
三、张量的创建方式
- 创建常量:tf.constant(value,dtype=,shape=,name=)
- 创建操作(!张量形式):算术运算(tf.add,tf.subtract,tf.multiply,tf.div/divide),数学操作(tf.abs/negative/sign/cos/sin/acos/squared_difference),矩阵运算(tf.diag_trace/eye/transpose/norm),张量运算(tf.tensor_dot),字符串操作(tf.encode_base64/decode_base64/string_join)
- 占位符tf.place_holder(dtype,shape,name),使用feeddict传入操作数,sess.run(op4,feed_dict={p1:2,p2:3})
- Python(numpy)对象转换:tf.convert_to_tensor(value,shape,name),
- 创建变量(与placeholder区别:定义时需赋初值&输入值会随时间改变pholder不会):tf.Variable(init_value,dtype,name)。
变量使用前必须先初始化:某变量var.initializer();tf.variables_initializer()初始化一组变量;tf.global_variables_initializer().run()全局。
6.生成函数(用在Variable内)
- 相同值填充:tf.zeros(shape,dtype,name);tf.zeros_like(tensor,dtype,name,optimize=True)创建于参数形状相同值全为0的张量;ones();ones_like,fill(dims,value,name)按给定维数创建张量并将元素填充为value,dims为一tuple。
- 序列填充:tf.lin_space(start,stop,num,name);tf.range(start,limit,delta=1,dtype,name)start可省默认0,delta为增量,limit不包含。
- 随机分布填充:tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)生成指定形状的张量用正态分布值填充;tf.truncated_normal(shape,mean,stddev,seed,name)截断正态分布填充(所有值的偏差小于两个标准差);random_uniform(shape,minval=0,maxval,dtype,seed,name)均匀分布7.random_gamma(shape,alpha,beta,stype,seed,nameget_variable(name,shape,dtype,initializer)获取变量:若该名称变量已定义则返回,否则创建。Tf.get_local_variable()用于分布式tf获取局部变量。
四、计算图
计算图(与数据流图) :由节点和边组成,节点代表操作(tf.Operation),边代表传递的张量(tf.Tensor)
- 默认计算图:tf.get_default_graph()
- 节点依赖&顺序执行&延迟加载(节点本身或依赖于其的节点被请求执行时,该节点才会执行)。
Tf.Graph.control_dependencies()函数控制节点执行顺序: with graph_variable.control_dependecies([节点列表]): #块中节点仅在列表中节点执行后执行
- 计算图可以分成多个部分由不同设备(CPU&GPU)执行:tf.python.client.device_lib.list_local_devices()列出可执行计算图的所有设备
-
设置执行设备:with tf.device('/device:CPU:0'):定义节点等。
默认放置:简单放置规则,顺序为之前放置的设备>通过tf.device()设置的设备>GPU>CPU。
- 运行时输出执行设备:config=tf.ConfigProto(),config.log_device_placement=True. With tf.Session(config=config) as sess: #
- 软放置:config.allow_soft_placement=True,tf不具有设置的GPU的操作实现(内核)或设备不存在时,允许自动放置。
- GPU内存处理config.gpu_options.per_process_gpu_memory_fraction=0.5;config.gpu_options.allow_growth=True.
- 创建计算图&计算子图 g=tf.Graph() with g.as_default(): #定义节点 with tf.Session(graph=g) as sess: sess.run(节点)
五、TensorBoard
TensorBoard:可视化计算图结构,绘制执行摘要
步骤:创建图节点-添加节点摘要tf.Summary()-合并摘要tf.summary.merge_all(),生成序列化的Summary ProtocalBuffers对象-创建tf.summary.FileWriter(save_dir,sess.graph)记录SBP对象-命令tensorboard --logdir=save_dir启动tensorboard。