第4章 TensorFlow基础知识
设备层和网络层gRPC(google Remote Procedure Call Protocol),RDMA(Remote Direct Memory Access)
数据操作层:卷积函数,激活函数。
图计算层
API层
应用层
命令式编程Imperative Style Programming,即通常意义上的程序。t=8+9; print(t)
符号式编程Symbolic Style Programming。
先定义变量,建立数据流图,规定各个变量之间的计算关系,进行编译。t=tensorflow.add(8,9); print(t)
涉及的运算放在图中,图的运行只在Session中。开启会话后,用数据填充节点进行运算。
Input/Reshape/Relu Layer/Logit Layer/Softmax/Cross Entropy/gradient/SGD Trainer
数据流图,节点、边组成的有向无环图Directed Acycline Graph。
边Edge
两种连接关系:
数据依赖,实线,代表数据(张量)。Forward Propagation,残差Backward Propagation。
控制依赖Control Denpendency,虚线,Happens-before。没有数据流过,源节点必须先于目的节点执行前,完成执行。
节点
算子,代表一个操作。
输入起点、输出终点。
读取、写入持久变量(Persistent variable)终点。
其他
图,
会话,feed/fetch, extend添加边和接单,run
设备,比如指定在哪个GPU上运行。
变量,在图中有固定位置,不能流动。
内核,
常用API
tf.Graph
tf.Operation
tf.Tensor
tf.Summary
name_scope
variable_scope
Batch Normalization
网络深度加深,会导致梯度消失Vanishing Gradient Problem。
Internal Covariate Shift,Source Domain/Target Domain的数据分布是一致的。
Generalization
用在激活函数之前。加大了梯度。收敛速度慢或梯度爆炸等无法训练的情况下。
激活函数、卷积函数,池化函数,损失函数,优化器。
激活函数
激活函数:运行时激活神经网络中某一部分神经元,将激活信息传入下一层的神经网络。神经网络能够解决非线性问题,就是激活函数加入了非线性因素。
神经网络的数据基础是处处可微。
激活函数不会更改输入数据的维度。tf.nnsigmoid():最常用。
sigmoid():最常用之一。有点是(0, 1),缺点是软饱和性。输入特征相差不明显时较好。
a = tf.constant([[1.0, 2.0], [1.0, 2.0], [1.0, 2.0]])
sess = tf.Session();
sess.run(tf.sigmoid(a))
(我这里加print 会出错)
tanh():最常用之二。以0为中心,收敛速度快。软饱和性。输出特征相差明显时较好。
relu():最收欢迎的。有时输入数据可以不用规范化。
softplus():relu的平滑版本。硬饱和,导致对应的权重无法更新,神经元死亡。
relu6()
crelu()
elu()
bias_add()
softsign()
dropout():一个神经元以keep_prob概率是否被抑制。被抑制输出为0,否则输出放大到1/keep_prob。
默认神经元是独立的,也可以通过noise_shape调节。
卷积函数
在一批图像上扫码的二位过滤器。tf.nn
convolution():N维卷积和。
con2d():对四维输入数据input和四维卷积核filter进行操作,然后进行二维的卷积操作,最后得到卷积之后的结果。
depthwise_conv2d():多个通道?
separable_conv2d():分离卷积核做卷积。
atrous_conv2d():孔卷积。
conv2d_transpose():conv2d的转置。
conv1d():3维输入的一维卷积。
conv3d():5维输入的三维卷积。
池化函数
一般用在卷积函数的下一层。
利用一个矩阵窗口在张量上扫描,将窗口中的值取最大值或平均值来减少元素个数。
avg_pool():
max_pool():
max_pool_with_argmax():最大值及所在位置。
avg_pool3d()/max_pool3d()
fractional_avg_pool()fractional_max_pool()。池化后的图片大小可以非整数倍的缩小。
pool():执行N维的池化操作。
分类函数
sigmoid_cross_entropy_with_logits()
softmax()
log_softmax()
softmax_cross_entropy_with_logits()
sparse_softmax_cross_entropy_with_logits()
优化方法
加速训练的优化方法都是基于梯度下降的。梯度下降是求函数极值的方法,学习到最后就是求损失函数的极值问题。
BGD:Batch Gradient Descent。优点:保证收敛;缺点:速度越来越慢。
SGD:Stochastic Gradient Descent。随机梯度下降。优点:训练数据集很大时,较快收敛;缺点:误差,局部最优,被困。
Momentum:引入了变量V。初期加速学习;后期加快收敛。
Nesterov Momentum:
Adagrad:自适应为各个参数分配不同的学习率。优点:学习率的自动更改。缺点:学习率单调递减。
Adadelta:
RMSProp:引入了一个衰减系数。
Adam:Adaptive moment estimation。
模型的存储与加载
生成检查点文件(Checkpoint file)。tf.train.Saver()。包含权重、变量,不包含图结构。
生成图协议文件(Graph proto file)。tf.train.write_graph。只包含图结构。
队列和线程
FIFOQueue
RandomShuffleQueue
QueueRunner
Coordinator
加载数据
预加载数据
填充数据
从文件读取数据