tensorflow函数简介

一、激活函数

  激活函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络之所以能解决非线性问题,本质上就是激活函数中加入了非线性因素弥补了线性模型的表达力。
1、sigmoid函数
  传统神经网络最常用的一种激活函数,优点在于输出映射在(0,1)内,单调连续,适合用作输出层,求导容易,缺点具有软饱和性,一旦输入落入饱和区,一阶导数变得接近0,产生梯度消失问题。
2、tanh函数
  同样具有软饱和性,输出以0为中心,收敛速度比sigmoid快,仍无法解决梯度消失问题。
注:软饱和指激活函数h(x)在取值趋于无穷大时,一阶导数趋于0。
硬饱和指当|x|>c时,f’(x)=0
3、relu函数
  目前最受欢迎的激活函数,在x<0时,硬饱和,x>0时,导数为1,所以在x>0时保持梯度不衰减,从而缓解梯度消失问题,能更快收敛,并提供神经网络的稀疏表达能力,但随着训练的进行,部分输入会落入硬饱和区,导致对应的权重无法更新,称为“神经元死亡”。
4、softplus函数
  relu的平滑版本
5、dropou函数
  一个神经元将以概率keep_prob决定是否被抑制。如果被抑制,神经元的输出为0;如果不被抑制,该神经元的输出将被放大到原来的1/keep_prob倍。默认情况下,每个神经元是否被抑制是相互独立的。

说明:

1)当输入数据特征相差明显时,用tanh效果很好;
2)当特征相差不明显的时候,sigmoid效果比较好;
3)sigmoid和tanh作为激活函数需要对输入进行规范化,否则激活后的值全部进入平坦区,而relu不会出现这种情况,有时也不需要输入规范化,因此85%-90%的神经网络会采用relu函数。

二、卷积函数

  卷积函数是构建神经网络的重要支架,是在一批图像上扫描的二维过滤器。
1、convolution
  计算N维卷积的和。
2、conv2d
  对一个四维的输入数据和四维的卷积核进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。
3、depthwise_conv2d
  将不同的卷积核独立地应用在每个通道上,然后把所有的结果进行汇总。
4、separable_conv2d
  利用几个分离的卷积核去做卷积。
5、atrous_conv2d
  计算Atrous卷积,又称孔卷积或者扩张卷积。
6、conv2d_transpose
  在解卷积网络(deconvolutional network)中有时称为“反卷积”,但实际上是conv2d的转置,而不是实际的反卷积。
7、conv1d
  计算给定三维的输入和过滤器的情况下的一维卷积。输入与卷积核的维度也是三维。
8、conv3d
  计算给定的五维的输入和过滤器的情况下的三维卷积。
9、conv3d_transpose
  与二维反卷积类似。

三、池化函数

1、avg_pool
  计算池化区域的元素的平均值
2、max_pool
  计算池化区域中元素的最大值
3、max_pool_with_argmax
  计算池化区域中元素的最大值和该最大值所在的位置
4、avg_pool3d和max_pool3d
  计算三维下的平均池化和最大池化
5、fractional_avg_pool和fractional_max_pool
  计算三维下的平均池化和最大池化
6、pool
  执行一个N的池化操作。

四、分类函数

1、sigmoid_cross_entropy_with_logits
  如果采用此函数作为损失函数,在神经网络的最后一层不需要进行sigmoid运算,此函数内部进行了sigmoid操作。
2、softmax
  计算softmax激活。
3、log_softmax
  计算log softmax.
4、softmax_cross_entropy_with_logits
  里面保存batch中每个样本的交叉熵。
5、sparse_softmax_cross_entropy_with_logits
  保存batch中每个样本的交叉熵。4、5的不同在于输入的范围。

五、优化方法

  目前加速训练的优化方法基本都是基于梯度下降的,只是细节上有些差异。梯度下降是求函数极值的一种方法,学习到最后就是求损失函数的极值问题。
1、BGD法
  全称batch gradient descent,即批梯度下降。这种方法利用现有参数对训练集中的每一个输入生成一个估计输出yi,然后和实际输出y比较,统计所有误差,求平均以后得到平均误差,以此作为更新参数的依据。迭代过程为:
  1)提取训练集中的所有内容{x1,…,xn},以及相关输出yi;
  2) 计算梯度和误差并更新参数。
优点:使用所有训练数据计算,能保证收敛,并且不需要逐渐减少学习率;
缺点:每一步都需要使用所有的训练数据,随着训练的进行,速度会越来越慢。
2、SGD法
  全称是stochastic gradient descent,即随机梯度下降。因为这种方法的主要思想是将数据集拆分成一个个批次(batch),随机抽取一个批次来计算并更新参数。也称为MBGD (minibatch gradient descent)
  SGD在每一次迭代计算mini_batch的梯度,然后对参数进行更新。与BGD相比,SGD在训练集很大时,仍能以较快的速度收敛,但是有以下两个缺点:
  1)由于抽取不可避免地梯度会有误差,需要手动调整学习率。但选择合适的学习率又比较困难。尤其在训练时,我们想对常出现的特征更新速度快一些,对不常出现的特征更新慢一点,而SGD在更新参数时对所有采用一样的学习率,因此无法满足需求。
  2)SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点。
3、Momentum法
  Momentum是模拟物理学中动量的概念,更新时在一定程度上保留之前的更新方向,利用当前的批次再微调本次的更新参数,因此引入了一个新的变量v(速度),作为前几次梯度的累加。Momentum能够更新学习率,在下降初期,前后梯度方向一致时,能够加快学习;在下降的中后期,在局部最小值的附近来回震荡时,能够抑制震荡,加快收敛。
4、Nesterov Momentum法
  Nesterov Momentum法由Ilya Sutskever在Nesterov工作的启发下提出的,是对传统Momentum法的一项改进。
标准Momentum法:
  首先计算一个梯度,然后在加速更新梯度的方向进行一个大的跳跃;
Nesterov法:
  首先在原来加速的梯度方向进行一个大的跳跃,然后在该位置计算梯度值,然后用这个梯度值修正最终的更新方向。
  以上四种方法都需要自己设定学习率,以下几种为自适应学习率的优化方法。
5、Adagrad法
  Adagrad法能够自适应地为各个参数分配不同的学习率,能够控制每个维度的梯度方向。优点是能够实现学习率的自动更改:如果本次更新时梯度大,学习率就衰减得快一些;如果本次更新时梯度小,学习率衰减得就慢一些。
6、Adadelta法
  Adagrad法仍存在一些问题:其学习率单调递减,在训练后期学习率非常小,并且需要手动设置一个全局的初始学习率。Adadelta法用一阶的方法,近似模拟二阶牛顿法,解决了这些问题。
7、RMSprop法
  RMSprop与Momentum类似,通过引入一个衰减系数,使每一回合都衰减一定比例。在实践中,对循环神经网络(RNN)效果很好。
8、Adam法
  Adam的名称来源于自适应矩估计(Adaptive moment estimation).Adam法根据损失函数针对每个参数的梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。

参考:《TensorFlow 技术解析与实践》整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值