我正在编写一个Planar数据分类程序,其中包含Coursera课程中的一个隐藏层。
该代码应该做什么,为什么不起作用?
def backward_propagation(parameters, cache, X, Y):
"""
Implement the backward propagation using the instructions above.
"""
m = X.shape[1]
# First, retrieve W1 and W2 from the dictionary "parameters".
### START CODE HERE ### (≈ 2 lines of code)
W1 = parameters["W1"]
W2 = parameters["W2"]
### END CODE HERE ###
# Retrieve also A1 and A2 from dictionary "cache".
### START CODE HERE ### (≈ 2 lines of code)
A1 = cache["A1"]
A2 = cache["A1"]
### END CODE HERE ###
# Backward propagation: calculate dW1, db1, dW2, db2.
### START CODE HERE ### (≈ 6 lines of code, corresponding to 6 equations on slide above)
dZ2= A2-Y
dW2 = (1/m)*np.dot(dZ2,A1.T)
db2 = (1/m)*np.sum(dZ2, axis=1, keepdims=True)
dZ1 = np.multiply(np.dot(W2.T, dZ2),1 - np.power(A1, 2))
dW1 = (1 / m) * np.dot(dZ1, X.T)
db1 = (1/m)*np.sum(dZ1,axis1,keepdims=True)
### END CODE HERE ###
grads = {"dW1": dW1,
"db1": db1,
"dW2": dW2,
"db2": db2}
return grads
parameters, cache, X_assess, Y_assess = backward_propagation_test_case()
grads = backward_propagation(parameters, cache, X_assess, Y_assess)
print ("dW1 = "+ str(grads["dW1"]))
print ("db1 = "+ str(grads["db1"]))
print ("dW2 = "+ str(grads["dW2"]))
print ("db2 = "+ str(grads["db2"]))
运行此代码时,出现以下错误:
ValueError: shapes (4,1) and (4,3) not aligned: 1 (dim 1) != 4 (dim 0)
最佳答案
当两个矩阵相乘时,即np.dot。第一个矩阵的列和第二个矩阵的行应相等。那就是numpy抛出错误的原因。您不能将4x1矩阵与4x3矩阵相乘。
关于python - python3 ValueError:形状(4,1)和(4,3)不对齐:1(dim 1)!= 4(dim 0),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46329090/