I want to create a model that can give me real value in output.
My input is nx3 and output is in the range -40 to -140
that is my model
class Regressor(nn.Module):
    def __init__(self):
        super(Regressor, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size_1)
        self.fc2 = nn.Linear(hidden_size_1, hidden_size_2)
        self.fc3 = nn.Linear(hidden_size_2, hidden_size_3)
        self.fc4 = nn.Linear(hidden_size_3, 1)
    
    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = F.relu(self.fc3(x))
        x = self.fc4(x)
        return x

I am using Adam Optimizer
opt = optim.Adam(model3.parameters(), lr=0.001)
Training sequence
epoch_data = []
for epoch in range(10000):
    avg_acc_test = 0
    avg_acc_train = 0
    avg_loss_train = 0
    avg_loss_test = 0
    for i in range(X_train.shape[0]):
        data_x = X_train_tensor[i]
        data_y = y_train_tensor[i]
        
        pred = model3(data_x)
#         print(pred[:5])
        loss = mse_loss(pred, data_y)
        
        opt.zero_grad()
        loss.backward()
        opt.step()
        
        pred_test = model3(X_test_tensor[0])
        loss_test = mse_loss(pred_test, y_test_tensor[0])
        avg_loss_train += loss.data
        avg_loss_test += loss_test.data

    if epoch % 50 == 0:    
        print('loss test {} loss train {}'.format(avg_loss_test/X_test.shape[0], avg_loss_train/X_train.shape[0] )) 

Now the problem is my loss is not converging it always get stuck around 176 and i tried many values of learning rate , different number of layers and different activation functions as well and different number of nodes as well, still it revolves around 176 , and yes i normalised the input data (not the output data)
What should i do please help