再神经网络里面常见的激活函数主要有三种:tanh,sigmoid,relu
激活函数
-
sigmoid
是常见的非线性激活函数y的范围是0-1,在TensorFlow中的对应的是tf.nn.sigmoid(x,name-None) -
tanh函数
非线性激活函数,y的值是-1-1,TensorFlow对应的是tf.nn.tanh(x,name=None) -
Relu函数
f(x)=max(0,x),tensorflow中对应的是tf.nn.relu(features,name=None)
这个函数的优点是处理后的数据具有更好额稀疏性,只有最大数值与0.
损失函数
-
均值平方差
就是mse,均方误差越小,表明模型越好, -
交叉熵
表现预测输入样本属于某一类的概率,越小,预测的效果越准
损失函数的选取取决于输入标签数据的的类型,如果输入的是实数,无界的值,那么就应该使永平方差,如果输入的标签是位矢量,使用交叉熵可能会更合适。
tensorflow 中常见的loss函数
均值平方差,就是tf.reduce_mean(tf.pow(tf.sub(logits,outputs),2.0))
交叉熵:主要有sigmoid函数,softmax函数
梯度下降
梯度下降是一个最优化算法,最优的逼近最小偏差模型,沿着梯度下降的方向求解最小值。主要有三种,
批量梯度下降算法,每次跟新都是讲训练集的所有样本都看一遍,计算量很大,并且速度慢
随机梯度下降算法:随机的看一个数据就算一下损失函数,非常快,但是收敛熊效果不是很好,可能在最优点晃来晃去。
小批量梯度下降算法:解决了以上的问题,就是采用折中的手段,小批量梯度下降,将数据分成若干批,按批处理更新参数,一批中的一组数据就决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。
退化学习率
设置学习率的时候,需要在精度和速度上找到一个平衡
lr越大,学的就很快,但是精度可能不是很好
lr小,精度可能提升,但是速度就是耗费很多的时间
decay叫做退化学习率,就是解决训练过程中对于学习率大和小的优点可以为我们所用。
刚开始的时候,使用大的学习率进行速度的提升,后面使用小的学习率进行精度的提升。可以使用学习率衰减函数
def exponential_decay(learning_rate,global_step,decay_steps,decay_rate,staircase=False,name=None):
stairscase默认的值是false,如果变成true,代表的是没有衰减功能。只是使用一个初始的学习率而已。