title: In PyTorch, what is the difference between forward() and an ordinary method?
body: <p>How is implementing the <code>forward()</code> method of a custom <code>nn.Module</code> class different from adding an ordinary method to that class?</p>
  
  <p>I heard that the <code>forward()</code> method should only accept and return tensors, because PyTorch has implemented special processing on the input and output of the <code>forward()</code> method. But I tried inputting/outputting non-tensor objects on a <code>forward()</code> method, and implementing a module that doesn't have a <code>forward()</code> method (instead, there are multiple custom-named methods which act like <code>forward()</code> methods). Both ways worked well.</p>