Tensorflow入门


Tensorflow实现原理

Tensorflow有一个重要组件client,它通过Session的接口与master及多个worker相连。其中每一个worker可以与多个设备相连,并管理这些硬件设备。master负责指导所有worker按流程执行计算图。

Tensorflow有两实现模式:

  1. 单机模式,client、master、worker在一台设备的同一个进程中。
  2. 分布式,允许client、master、worker在不同机器的不同进程中,同时集中由master process统一管理各项任务。

一个节点的所有上游依赖执行完成时(依赖数为0),这个节点就会加入ready queue以等待执行,同时,它下游的所有节点依赖数减1。

当有多个设备时,有两个问题:
1.每一各节点应该让什么硬件设备执行?

 Tensorflow设计了一套为节点分配设备的策略。

2.如何管理节点间的数据通讯?

 Tensorflow将数据通信的问题转化为发送节点和接收节点的实现问题。
扩展功能:
  1. 自动求导。寻找正向路径,回溯到头部,对回溯路径的每一各节点增加一个对应求梯度的节点,根据链式法则计算总梯度。
  2. 单独执行子图。
  3. 计算图的控制流。提供Switch和Merge实现if-else功能,Enter、Leave和NexIteration实现循环各迭代。高级语言的控制计算流会被自动编译为上述的operator。
  4. 数据输入。使用feed node,input node等输入数据 。
  5. 任务调度。让计算图中的不同节点异步执行。
  6. 容器。一种特殊的用来管理长期变量的机制,同时可以使不同计算图的不同Session之间共享一些状态值。
性能优化:
  1. Tensorflow可以自动识别重复的计算,同时改写计算图,只执行一次重复计算。
  2. 巧妙安排运算的顺序,极大改善数据传输和内存占用的问题。
  3. 提供异步计算,使线程执行时无须一直等待某个节点计算完成。Tensorflow提供了三种不同的加速神经网络训练的并行计算模式:
    数据并行,batch数据放在不同设备上计算,实现梯度计算的并行
    模型并行,计算图的不同部分放到不同的设备上运算。
    流水线并行,和异步数据并行很像,只不过在同一个硬件设备上实现并行

Tensorflow计算模型——计算图

Tensorflow是一个通过计算图的形式来表述计算机的编程系统。计算图提供了管理不同集合的功能。

Tensorflow一般分为两部分:
1.定义计算图中所有的计算
2.执行计算

系统自动维护一个默认的计算图,通过tf.get_default_graph()获取。
支持通过tf.Graph()生成新的计算图。
通过tf.Graph.device()指定运行计算的设备。
系统默认维护5张集合列表。


Tensorflow数据模型——张量

Tensorflow中,所有的数据都是通过张量的形式来表示。
张量可以被简单的理解为多维数组,但其实现并不是采用数组的形式,它只是对Tensorflow中运算结果的引用,张量中了并没有保存真正的数字,而是保存得到数字的计算过程。

张量有三个属性:
1.名字,张量的唯一标识符
2.维度
3.类型,对所有参与运算的张量进行维度检查

张量主要有两类用途:
1.对中间计算结果的引用
2.构造完计算图之后,可以用来获得计算结果


Tensorflow运行模型——会话

Tensorflow使用会话(Session)来指定定义好的运算。会话拥有并管理Tensorflow程序运行时的所有资源。计算结束后必须关闭会话来帮助系统回收资源。

Tensorflow使用会话的模式一般有两种:
1.需要明确调用会话关闭和生成函数
2.使用python的上下文管理器来使用会话

当默认的会话被指定后,可以使用 tf.Tensor.eval()函数来计算一个张量的值。同时可以使用tf.InteractiveSession()函数自动生成会话注册为默认会话。


Tensorflow实现神经网络

用于描述实体的数字的组合就是一个实体的特征向量。

前向传播算法

解决将输入的特征向量经过层层推到得到最后的输出的算法。前向传播算法可以表示为矩阵乘法。

Tensorflow中变量(tf.Variable)的作用就是保存和更新神经网络中的参数,但是需要指定初始值,一般情况下使用随机数给变量初始化。

神经网络中,偏置项(bias)通常使用常数来设置初始值。

在实际使用时,虽然定义好了变量的初始化方法,当这个方法并没有被执行,需要通过运行Variable.initializer来给变量赋值。当变量数目较多且存在依赖关系时,可以使用tf.initializer_all_variables()来实现初始化所有的变量。

初始化变量是通过Assign操作完成的,可以通过read操作将变量的值提供给乘法运算。

变量的两个重要特性:
1.维度,在程序运行中可以改变,validate_shape=False
2.类型,类型一旦指定,不可改变

通过tf.all_variables()可以拿到计算图上的所有变量。
通过tf.trainable_variables()得到所有需要优化的参数。

Tensorflow中使用placeholder机制用于提供输入数据,placeholder相当于定义了一个未知,这个位置的数据在程序运行的时候再指定,该位置的类型需要指定,指定后不可改变,维度信息可以通过提供的数据推到得出。
sess.run(y, feed_dict = {x: [[1, 2]]}),在计算时,提过feed_dict来指定x的值,它是一个字典,用来给出每个用到的placeholder的取值。


训练神经网络的过程:

1.定义神经网络的结构和前向传播算法的输出结果。
2.定义损失函数以及选择反向传播优化算法。
3.生成会话并且在训练数据上反复运行反向传播优化算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值