title: Calling the forward method in PyTorch vs. calling the model instance
body: <p>A lot of the PyTorch tutorials I've been viewing do something like this.</p>
  <p>Define model:</p>
  <pre><code>class Network(nn.Module):
      def __init__():
          super().__init__()
          self.conv1 = ..
          ... 
      
      def forward(x)
          ...
      ...
  </code></pre>
  <p>Once the Network has been instantiated (<code>net = Network()</code>), the people in the tutorials write <code>net(input_data)</code> instead of <code>net.forward(input_data)</code>.
  I tried <code>net.forward()</code> and it gives the same results as <code>net()</code>.</p>
  <p>Why is this a common practice, and also why does this work?</p>