我正在编写一个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/

10-10 05:12