当神经网络丢失下降但准确性没有增加?

时间:2017-12-31 12:58:23

标签: python neural-network classification backpropagation perceptron

我为具有一个隐藏层和sigmoid激活函数的神经网络实现了基于批处理的反向传播算法。输出层是一热的Sigmoid层。第一层的网是z1。应用sigmoid后它变为a1。类似地,我们在第二层有z2和a2。

反向传播过程如下:

x, y = train_data, train_target
for i in range(0, num_passes):
    # call
    z1, a1, z2, a2 = predict(current_model, x)

    # recall
    derv_out2 = (y - a2) * (a2 * (1 - a2))
    delta2 = np.matmul(np.transpose(a1), derv_out2) / train_size
    dw2 = delta2 + reg_lambda * w2
    db2 = np.mean(b2 * derv_out2, 0)

    derv_out1 = a1 * np.reshape(np.sum(delta2 * w2, 1), [1, a1.shape[1]])
    delta1 = np.matmul(np.transpose(x), derv_out1) / train_size
    dw1 = delta1 + reg_lambda * w1
    db1 = np.mean(b1 * derv_out1, 0)

    # gradient descent parameter update
    w1 += learning_rate * dw1
    b1 += learning_rate * db1
    w2 += learning_rate * dw2
    b2 += learning_rate * db2

    # assign new parameters to the model
    current_model = {'w1': w1, 'b1': b1, 'w2': w2, 'b2': b2}

完整的代码文件:link

上述算法的丢失正在减少,但分类的准确性是随机选择。有什么问题?

1 个答案:

答案 0 :(得分:0)

基于@ bivouac0评论,我尝试调整学习率。 我发现基本步骤的学习率为0.1或0.01非常低(导致学习时间长)。之后,我实施自适应方法来调整学习率(当损失下降时增加速率,在上升时减少速率)。使用这种方法可以显着提高准确度。