当神经网络损失下降但准确率没有增加时?
When neural network loss is descending but the accuracy is not increased?
我为具有一个隐藏层和 sigmoid 激活函数的神经网络实现了一种基于批处理的反向传播算法。输出层是one-hot 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
上述算法的loss都在下降,但是分类的准确率是关于随机选择的。有什么问题?
根据@bivouac0 的评论,我尝试调整学习率。
我发现 0.1 或 0.01 的学习率对于基本步骤来说非常低(导致学习时间长)。之后,我实施自适应方法来调整学习率(损失下降时提高速度,上升时降低速度)。使用这种方法,准确性显着提高。
我为具有一个隐藏层和 sigmoid 激活函数的神经网络实现了一种基于批处理的反向传播算法。输出层是one-hot 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
上述算法的loss都在下降,但是分类的准确率是关于随机选择的。有什么问题?
根据@bivouac0 的评论,我尝试调整学习率。 我发现 0.1 或 0.01 的学习率对于基本步骤来说非常低(导致学习时间长)。之后,我实施自适应方法来调整学习率(损失下降时提高速度,上升时降低速度)。使用这种方法,准确性显着提高。