I get this error:
If you weighted them correctly, you’d expect the two losses to be the same.
With epsilon = 1, your losses should be, L(y_pred_1) = -0.4956203 and L(y_pred_2) = -0.4956203
Your outputs:
L(y_pred_1) = 0.97540486
L(y_pred_2) = 0.97540486
Difference: L(y_pred_1) - L(y_pred_2) = 0.0
Apart from any error I might have made, what I cant understand is how L(y_pred_x) can be negative. The “log” is a negative and it is multiplied by a “-1” and all other terms are positive so how can this be a negative number ?
Without exposing actual code, for the positive weights
-1 * pos_weights * y_true * K.log(y_pred) must be postive right?
Or is my understanding not correct? Been stuck on this for a few weeks now
Do help.
Thanks.
Hi @getjaidev ,
Taking what you say
“-1 * pos_weights * y_true * K.log(y_pred) must be postive right?”
Lets break this down:
pos_weights: positive
y_true: positive
log(…): positive
so pos_weigts * y_true * log(…) > 0
… but at the beginning you have -1. That will turn this into a negative number.
Now lets see the entire exercise:
The formula that we want to implement is:
−(wpylog(f(x))+wn(1−y)log(1−f(x))).
This formula includes an array of positive weights (wp) and an array of negative weights (wn).
So we accumulate in a variable called ‘loss’ the negative product of (wpylog(f(x))+wn(1−y)log(1−f(x))).
As you very well say, the logs will produce a positive result, and we know that ‘wp’ is positive, but we have ‘wn’, which is an array of negative weights ( as per definition of args in the class).
So, how can L(y_pred_x) be negative? well, there is a possible cause for this:
if (wpylog(f(x))+wn(1−y)log(1−f(x))) > 0 then, by multiplying this by -1 we get a negative value. And even if ‘wn’ was an array of positive values, this would still hold true.
What do you think?
Thanks,
Juan
I have used both (again not showing the indices since I do not want to show the code):
loss_reg_p=-1*(pos_weights * y_true * K.log(y_pred))
loss_reg_n=-1*(neg_weights * (1-y_true) * K.log(1-y_pred))
loss_reg = loss_reg_p+loss_reg_n
Now if pos_weights and neg_weights are positive, y_true is positive and log (1-y_pred) is negative then loss_reg_p and loss_reg_n must both be positive because of the -1, right?
Hi @getjaidev ,
I also suppose your thought is right.
However, you may miss the condition of the code execution, where we set epsilon = 1 for K.log(y_pred + epsilon) in the assignment.
When epsilon = 1, K.log(y_pred + epsilon) must be positive.
I hope you will resolve this by rechecking the code of Exercise 3.
Best regards,
Nakamura
Hi Juan…
How is “wn” negative? My output shows this:
w_p:
[0.25 0.25 0.5 ]
w_n:
[0.75 0.75 0.5 ]
Nakamura… Thanks. That explains a lot.
I have really been struggling a lot with this. I don’t think the epsilon is being used in the tests since I get only positive returns.
Also I see this as the last two lines of output…
Error: Wrong output. One possible mistake, your epsilon is not equal to 1.
4 Tests passed
2 Tests failed
Hi Nakamura…
Solved it. Your post was very helpful. It was indeed the epsilon issue.
Thank you.
Juan… Please ignore this question. Thanks for your help. It was an epsilon issue.