Exercise 5 - propagate

Hello I am getting error in this exercise.
Perhaps my code is wrong or I implemented it wrong.
Kinldy help.

Hi @sousinha. The traceback indicates that you are not applying the rules of matrix algebra properly. Note that you are using the element-by-element multiplication operator (*), leading to the error. Only matrices/vectors of the same size will conform to that operation. In the “Tips” section of the docstring (the information between triple quotes at the top of the function), you will find the function for the matrix operation that you need to apply.

1 Like

Also note that once you fix the error that @kenb has pointed out, there are several more errors in the code as currently shown. The cost line will throw an error because np.loga is not the name of a numpy function and log is also not a numpy function. You’ll also get an error thrown by the line that computes dw. It will be something along the lines of “Unable to invoke non-function object”. What is the operation that you want to invoke between X and (A - Y)^T?

Hello paulinpaloato,

I want to implement the cost function, I am getting an error here, I beileive the correct expression will be np.log(a) for numpy function.

image

for dw I am multiplying by * operator between X and (A-Y).T

image

Yes, np.log(a) is correct for that term.

For the dw calculation, that operation is a dot product style matrix multiply, not elementwise (*). You have to understand Prof Ng’s notational conventions when he is writing math formulas: when he means elementwise multiply, he will always use *. When he writes the operands adjacent with no operators, then he means “real” dot product style matrix multiply. It would be better if he used a more explicit notation as in:

dw = \displaystyle \frac {1}{m} X \cdot (A - Y)^T

But he didn’t ask my opinion, so we just have to understand his notation.

The other important point is that python is not the same as math. If you write this:

foo = X(A-Y).T

in python, that means that X is a function and you are invoking it with the argument (A - Y) and then taking the transpose. That will not work out well in the example at hand.