paddlepaddle深度学习二分类问题求解

最近闲起来了,总结一些之前用过的东西吧。

大家参考就好,非专业学者。

在做二分类问题时,我们通常只要用sofamax或者sigmod最后在输出层分类就好。这个就是深度学习的优越性,你可以不用了解原理,所以本人就是渣在这边,可以吧模型训练出很好的效果,但是对于算法理解还是不到位的。

使用paddlepaddle框架可以很简单的进行分类,如下:

#定义前向传播
def forward():
    x = fluid.layers.data(name='x',shape=[1,9],dtype='float32')
    hidden = fluid.layers.fc(input=x,size=36,act='relu')
    y_predict = fluid.layers.fc(input=hidden,size=2,act='softmax')
    return y_predict

一般来讲,使用relu函数激活,大致这个意思 。按照正态分布来讲可以保证1%-4%的神经元处于活跃状态,没有了其他复杂激活函数中诸如指数函数的影响;同时活跃度的分散性使得神经网络整体计算成本下降。然后你就可以很快的训练出模型。大概这个意思吧!虽然在防止梯度爆炸和梯度消失有一定的帮助,但是在实际使用过程中,由于输入层比较大,还有较多的网络层数,导致,个人建议还是利用lstm或者加入正则化的方法,减少这些问题的发生。

我在一次分类中,用了下面这个方法来避免训练中存在的梯度爆炸和梯度消失。

def optimizer_program():
    return fluid.optimizer.Adam(learning_rate=0.001,regularization=fluid.regularizer.L2DecayRegularizer(4e-4))

当然训练轮数要大,理由有两个。

过度训练虽然未必有利于提高模型性能,但是可以看出模型训练中的问题。就比如梯度爆炸,当轮数高了你就会发现,其实爆炸的发生也暗含着模型中可能有过拟合的问题。这种问题不是你单单减少迭代轮数,看不见爆炸就是不存在的问题。所以不要小看迭代轮数对作用哦!!!

由于学习率较小要达到收敛还是要匹配较高的迭代轮数的。

 paddlepaddle是深度学习框架,我们可以看到的都是直接可以用的方法API,无法理解深层次的原理,我还是希望大家可以在评论区,多多评论,指出问题。

你可能感兴趣的:(paddle)