深入理解TensorFlow之基础概念:数据流图、张量、操作、会话、优化器

博客已迁至知乎,本文链接:https://zhuanlan.zhihu.com/p/70877190

前言

本文梳理了TensorFlow的基本概念:数据流图、Tensor、Operation、Variable、Placeholder、Session、Optimizer、minimize。并对每个概念进行了详细的讲解和扩展。

阅读本文需要对深度学习有一定了解,并知道tensorflow是做什么的。

一. 编程范式:数据流图

声明式编程和命令式编程

声明式编程:做什么
命令式编程:怎么做

TensorFlow采用了声明式编程范式。

声明式编程的优点:
1.代码可读性强:以目标而非过程为导向。
2.支持引用透明:函数的调用语句可以由它的返回值取代。
3.提供预编译优化能力:先构建出数据流图,无依赖逻辑的并行化计算、无效逻辑去除、公共逻辑提取等。

tensorflow数据流图

数据流图定义:用节点和有向边描述数学运算的有向无环图。

数据流图中的节点代表各类操作,包括数学运算、数据填充、结果输出和变量读写等等,每个节点的操作都需要分配到具体的物理设备(cpu、gpu)上执行。有向边描述了节点间的输入输出关系。

1.节点

前向图中的节点有:

  • 数学函数或表达式
  • 存储模型参数的变量(variable)
  • 占位符(placeholder)

后向图中的节点有:

  • 梯度值
  • 更新模型参数的操作
  • 更新后的模型参数
2.有向边

多数用来传输数据,少数用来控制依赖。

3.执行原理

数据流图执行顺序的实现参考了拓扑排序的设计思想。
当我们使用tensorflow执行指定数据流图时,其执行过程可分为以下4个步骤

  • a.以节点名称作为关键字,其所依赖的个数为值,创建一个散列表,将所有节点放入这个散列表。
  • b.为此数据流图创建一个可执行队列,将三列表中依赖个数为0的节点加入队列,并在散列表中删除它们。
  • c.一次执行队列中的每个一节点,执行成功后将此节点输出项的节点的依赖数减1,更新散列表。
  • d.重复b和c,直到执行队列为空。

二. 数据载体:张量

在tensorflow中,张量(Tensor)是数据流图上的数据载体,通常是多维数组。还有一种叫SpareseTensor,存放稀疏数据(0的数量远多于非0元素),旨在减少稀疏数据的内存占用。
在物理实现时,它含有指向张量数据的内存缓冲区的指针,当它不被任何操作依赖时,会释放该内存缓冲区。

1.创建
一般tensor都不是直接创建的,而是定义常量和代数计算操作而间接创建的。

import tensorflow as tf
a = tf.constant(1, name="a", dtype=tf.int32)
b = tf.constant(2, name="b", dtype=tf.int32)
c = tf.add(a, b, name="c")
print(a)
print(b)
print(c)
Tensor("a:0", shape=(), dtype=int32)
Tensor("b:0", shape=(), dtype=int32)
Tensor("c:0", shape=(), dtype=int32)

2.求解
如果想要求解某个张量的值,则需要创建会话,然后执行张量的eval方法或会话的run方法。

with tf.Session() 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值