Tensorflow的基础知识
Tensorflow系统架构
Tensorflow的系统架构,自低向上分为设备层和网络层,数据操作层和图计算层,API层,应用层;其中设备层和网络层、数据操作层、图计算层是Tensorflow的核心计算层。
设计理念
Tensorflow的设计理念主要体现在以下两个方面:
(1)将图的定义和图的运行完全分开。因此,Tensorflow被认为是一个“符号主义”的库。
我们知道,编程模式通常分为命令式编程和符号式编程。命令式编程就是编写我们理解意义上的程序,很容易理解和调试,按照原有逻辑执行。符号式编程涉及很多嵌入和优化,不容易理解和调试,但运行速度相对有所提升。现有的深度学习框架中,Torch是典型命令式的,Caffe、MXNet采用了两种编程模式混合的方法,而Tensorflow完全采用符号式编程。
符号式编程计算一般是先定义各种变量,然后建立一个数据流图,在数据流图中规定各个变量之间的计算关系,最后需要对数据流图进行编译,但此时的数据流图还是一个空壳,里面没有任何实际的数据,只有把需要运算的输入放进去,才能在整个模型中形成数据流,从而形成输出值。
例如:
t = 8 + 9
print(t)
在传统的程序操作中,定义了t的运算,在运行时就执行了,并输出17,而在Tensorflow中,数据流图中的节点,实际上对应的是Tensorflow API中的一个操作,并没有真正去执行。
importtensorflowastf
t = tf.add(8, 9)
print(t) #输出Tensor("Add:0", shape=(), dtype=int32)
定义了一个操作,但实际上并没有运行。
(2)Tensorflow中涉及的运算都要放在图中,而图的运行只发送在会话(Session)中。开启会话后,就可以用数据去填充节点,进行运算;关闭会话后,就不能进行计算了。因此,会话提供了操作运行和Tensor求值的环境。
例如:
importtensorflowastf
"""
创建图
"""
a = tf.constant([1.0,2.0])
b = tf.constant([3.0,4.0])
c = a * b
"""
创建会话
"""
withtf.Session()assess:
print(sess.run(c))
sess.close()
编程模型
Tensorflow是用数据流图做的计算,因此我们先创建一个数据流图(也称为网络结构图),如图所示,看一下数据流图中的各个因素,
如图讲了Tensorflow的运行原理。图中包含输入(input)、塑形(reshape)、Relu层(Relu layer)、Logit层(Logit layer)、Softmax、交叉熵(cross entropy)、梯度(gradient)、SGD训练(SGD Trainer)等部分,是一个简单的回归模型。
它的计算过程是,首先从输入开始,经过塑形后,一层一层进行前向传播运算。Relu层(隐藏层)里面会有两个参数,即Wh1和bh1,在输出前使用Relu(Rectified Linear Units)激活函数做非线性处理。然后进入Logit层(输出层),学习两个参数Wsm和bsm。用Softmax来计算输出结果中各个类别的概率分布。用交叉熵来度量两个概率分布(源样本的概率分布和输出结果的概率分布)之间的相似性。然后开始计算梯度,这里是需要参数Wh1、bh1、Wsm、bsm,以及交叉熵后的结果,随后进入SGD训练,也就是反向传播过程,从上往下计算每一层的参数,依次进行更新。也就是说,计算和更新的顺序为bsm、Wsm、bh1和Wh1。
顾名思义,Tensorflow是指“张量的流动”。Tensorflow的数据流图是由节点(node)和边(edge)组成的有向无环图(directed acycline graph,DAG)。Tensorflow由Tensor和Flow两部分组成,Tensor(张量)代表了数据流图中的边,而Flow(流动)这个动作就代表了数据流图中节点所做的操作。
logistic的密度函数态视和分布函数动频(截取压缩版)
完整版请移步B站看单参数(μ为位置参数,γ为形状参数)变化以及位置参数和形状参数同时变化的情况
https://www.bilibili.com/video/av41580844/
好看请点这里~