TensorFlow核心

一、核心

数据模型:张量;

张量:

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()没有这个限制。

三、张量的创建方式

  1. 创建常量:tf.constant(value,dtype=,shape=,name=)
  2. 创建操作(!张量形式):算术运算(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)
  3. 占位符tf.place_holder(dtype,shape,name),使用feeddict传入操作数,sess.run(op4,feed_dict={p1:2,p2:3})
  4. Python(numpy)对象转换:tf.convert_to_tensor(value,shape,name),
  5. 创建变量(与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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值