python - 反向传播不起作用
问题描述
我正在为具有 2 个隐藏层的神经网络编写代码。这是我的代码片段:
for i in range(200):
z1 = sigmoid(np.dot(W1, X_train) + b1)
z2 = sigmoid(np.dot(W2, z1) + b2)
z3 = sigmoid(np.dot(W3, z2) + b3)
C = cost(z3, Y_train)
print(C)
d3 = - np.multiply(np.multiply(z3, 1-z3), (np.divide(Y_train, z3) - np.divide(1 - Y_train, 1 - z3)))
dw3 = np.dot(d3, z2.T)
db3 = np.sum(d3, axis=1, keepdims=True)
d2 = np.multiply(np.dot(W3.T, d3), np.multiply(z2, 1-z2))
dw2 = np.dot(d2, z1.T)
db2 = np.sum(d2, axis=1, keepdims=True)
d1 = np.multiply(np.dot(W2.T, d2), np.multiply(z1, 1-z1))
dw1 = np.dot(d1, X_train.T)
db1 = np.sum(d1, axis=1, keepdims=True)
W1 -= 0.005*dw1
W2 -= 0.005*dw2
W3 -= 0.005*dw3
b1 -= 0.005*db1
b2 -= 0.005*db2
b3 -= 0.005*db3
成本函数:
def cost(p, y):
loss = -(np.multiply(y, np.log(p)) + np.multiply((1 - y), np.log(1 - p)))
c = np.sum(loss)*1.0 / p.shape[1]
return c
方面:
X_train : 784x60000
W1: 100x784
b1: 100x1
W2: 40x100
b2: 40x1
W3: 10x40
b3: 10x1
我的成本似乎下降了一段时间,然后开始在某个点附近波动,而我的准确性根本没有增加。我的代码有什么问题?
解决方案
推荐阅读
- ios - 如何访问特定目录中的所有图像?
- mongodb - 递归结构中关联类的匹配字段
- c# - c# 控制台应用程序中的 SequenceEqual 不起作用
- hibernate - 我什么时候应该在 Spring Data JPA 中使用 @EntityGraph?
- android - 如何在不使用任何第三方库的情况下向用户提示各种按钮和其他操作(如 google 保持涟漪效应)
- python - 在数据框中使用分类变量,在散点图中沿线着色线图
- r - 如何在 R 中从 FTP 导入多个 CSV 文件
- docker - 无法与 docker 容器交互:停止、rm、检查...命令行刚刚卡住
- php - Laravel $errors 没有在刀片中显示
- typescript - 从快照中获取时间戳字段作为 Cloud Function Triggers 中的时间戳