I noticed that one can use the functional library:
import torch.nn.functional as F
...
x = F.relu(self.conv1(x)) 

or use the torch.nn as in:
torch.nn.ReLU

or even the clamp operator:
x.clamp(min=0)

is there a reason why there are three ways to do the same thing?