Week3___Tensorflow Introduction__Compute cost

I try to compute the cost, here is the code i wrote

cost = tf.reduce_mean(tf.math.maximum(logits,0)-logits*labels+tf.math.log(1+tf.math.exp(-abs(logits))),axis=-1)

However, i got this error,

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

getting same error. Did u get the solution and can u pls help me with initilise parameters code, if possible

I think you should use the binary_crossentropy function as stated in section 3.2.

Please check if that helps.

1 Like

Hi kampamocha,
I’m struggling with Exercise 6 - compute_cost. Can you give me any guidance in light of the following?

I can see that the lales are 1 or 0, and that the logits seem to be probabilities, hence from_logits=False, but something seems to be amiss.

Regards, Harry

Hi @FatHaz,

You need to compute the mean over the binary_crossentropy function, please check the example shown in the initial paragraph on section 3.2. Also note the value of from_logits parameter, since this is associated to y_pred rather than labels.

Hi kampamocha

Most obliged. I’d added the mean before I read your email, but the key was changing from False to True!

Thank you, Harry

your were missing the other call of tf function as tf.keras.metrics.binary_crossentropy
by thw way, there was other ways i found can share as below,

cost = tf.reduce_mean(tf.reduce_mean(tf.maximum(logits, 0) - logits * labels + tf.math.log(1 + tf.math.exp(-abs(logits))), axis=-1))

Can some please explain why the code in the paragraph above the cost exercise, that is -

cost = tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true = logits, y_pred = labels, from_logits=True))

is not working.

Whereas, -

cost = tf.reduce_mean(tf.reduce_mean(tf.maximum(logits, 0) - logits * labels + tf.math.log(1 + tf.math.exp(-abs(logits))), axis=-1))

Is working properly?

Please if someone can explain.

Thank you,
Saransh

Hi, @Saransh_Jhunjhunwala.

Make sure you understand the difference between y_true and y_pred and let me know if you need any hints.

Check this post if you’re not sure where the second formula comes from.

Good luck with the assignment :slight_smile:

Understood my mistake,
Thank you

2 Likes

cost = tf.reduce_mean(tf.keras.losses.categorical_crossentropy(tf.transpose(labels),tf.transpose(logits),from_logits = True))
it works
and in your answer, notice that y true = labels

3 Likes

I think you should use
tf.keras.metrics.categorical_crossentropy
instead of the binary.

I think tf.keras.metrics.categorical_crossentropy is the correct implementation

Hi @Hussam,

You are right, we should use categorical_cross_entropy. At the time of my previous comment the notebook specified that you should use binary_cross_entropy, later that was revised and changed to what it is now, which makes more sense.

If you are interested, you can check some discussions about it:

4 Likes

Why did we need to transpose the labels and logits?

Read this where Mentor Kin @Kic explains why we need to do that.

Best,
Saif.

1 Like

Also note that this is an old thread and refers to the way this assignment used to work. The transpose and from_logits parts are still valid, but they changed it a while ago so that we sum the loss values instead of computing the mean. Here’s a thread which explains why they made that change.

1 Like