How to get gradient wrt a parameter defining the mask size?

I have a tensor R containing distances to the center position and a parameter r_max defining the maximum distance. I want to generate a mask like R.lt(r_max) and get the gradient wrt r_max. How should I generate the mask tensor to make this possible? I tried lt() and torch.where()and both failed.

If you want a boolean mask (e.g., as returned by lt), that is not floating type so you won’t be able to compute gradient of it wrt to anything. If you do something like clamp_max, you could get gradients wrt R and r_max, but not sure if that’s what you need.

I will use the mask to do calculation so I think clamp can solve my problem. Thanks a lot.

I’m sorry. It seems that clamp only accepts Number as min/max which can not be differentiable.

I found a way to make the ‘r_max’ differentiable.

import torch

x = torch.linspace(-20, 19, 40)
Y, X = torch.meshgrid(x, x)
R = (X**2 + Y**2)**0.5

r_max = torch.tensor(15.0, requires_grad=True)

R_norm = R / r_max
mask = R_norm.where(R_norm>1, torch.zeros_like(r))
mask = mask.where(R_norm<1, torch.ones_like(r))

thanks for sharing! i had the same question

Sorry for ignoring the difference between tensor.where(condition, y) and np.where(condition, y). In order to get results like R.lt(r_max), the code should be:

mask = R_norm.where(R_norm>1, torch.ones_like(r))
mask = mask.where(R_norm<1, torch.zeros_like(r))