# C3 - Week 4: Question about masking in the assignment (in TripletLossFn)

I have completed the assignment, but I am having trouble understanding how the masking portion works in `TripletLossFn`.

`mask_exclude_positives` has two masks; these masks are implemented with the “or” (`|`) operator. After, in `negative_without_positive`, we multiply `mask_exclude_positives` by a number and then subtract it from an array. How does the “or” operator work with arithmetic? When we multiply `negative_without_positive` by a number, does this mean both masks are multiplied? Does the “or” operator mean that the masks are applied sequentially? Would that even make sense, since they masks work on two different parts of the array?

In general, don’t understand how `|` would work in this part of the function. This seems like a pretty powerful concept, but I am not understanding it.

The “or” operation is pretty simple in `mask_exclude_positives` it just checks both masks if there is TRUE value in any of them.

When you multiply TRUE value by a number you get that number, 0 everywhere else.

This is a part from `TripletLossFn` calculation when I wanted to check the " Expected Output" of that exercise. (Where I think the course creators chose a poor batch dimension of 2, so I wanted to check the inner workings when the batch_size is 4).

If you might be interested in full calculations:

So here is the original exercise test (with batch size 2, I remove the solution code lines):

And here is I think better example:

Cheers

6 Likes

I am also trying to understand what to do here. The first mask is of `negative_zero_on_duplicate` itself?

1 Like

That’s correct - the `negative_zero_on_duplicate` results in zeroes on the diagonal - in other words, assign zero scores for “itself”.

1 Like