I have the following simple example code for linear regression as follows.import torch

```
import numpy as np
from torch.autograd import Variable
class linearRegression(torch.nn.Module):
def __init__(self, inputSize, outputSize):
super(linearRegression, self).__init__()
self.linear = torch.nn.Linear(inputSize, outputSize)
def forward(self, x):
out = self.linear(x)
return out
x = np.array([1], dtype = np.float32).reshape(-1, 1)
x = Variable(torch.from_numpy(x))
model = linearRegression(1, 1)
model(x)
```

the output is `tensor([[0.4512]], grad_fn=<AddmmBackward>)`

.

My question is how the output is made by not `model.foward(x)`

but `model(x)`

.

In this code I have never called `forward`

, but it seems to be called.

### >Solution :

It is because the dunder method `__call__`

of `nn.Module`

will internally call its user-defined `forward`

method.