I have defined a function called `LiocFunction`

and it uses proposals refined by regression values output from `self.RCNN_bbox_pred`

(nn.Linear) to calculate some scores.

Its self-defined backward() returns the gradients of proposals, labels, mask

So it looks like this:

```
bbox_pred = self.RCNN_bbox_pred(pooled_feat)
proposals = bbox_transform.apply(boxes, bbox_pred)
scores = LiocFunction.apply(proposals, labels, mask)
```

```
class LiocFunction(torch.autograd.Function):
@staticmethod
def forward(ctx, proposals,labels, mask):
#proposals = [1,num_boxes,5]
ctx.save_for_backward(proposals, labels, mask)
back = False
output = calculate_Loic(proposals, labels, mask, back) #output = [1,num_boxes,1]
return output
@staticmethod
def backward(ctx, grad_pro):
proposals, labels, mask = ctx.saved_variables
grad_proposals = grad_labels = grad_mask = None
back = True
grad_proposals = calculate_Loic(proposals, labels, mask, back)
return grad_proposals, grad_labels, grad_mask
```

I also implement `bbox_transform`

and the backward() returns the gradients of boxes, bbox_pred

I have found that the backward() of two self-defined functions are called during training, but the back propagation stops at bbox_transform, doesnâ€™t go further to

nn.Linear layer. What could have gone wrong?