Hello, I am new to deep learning and pytorch, I try to use DNN method to predict the output value, but the loss is saturated when training.
Any comment will be very helpful.
All the code is list below:
import time
import torch
import numpy as np
import pandas as pd
import torch.nn.functional as F

from torch import nn
from sklearn.utils import shuffle
from torch.autograd import Variable
from torch.optim import lr_scheduler
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split

Dataset = pd.read_csv('./Input Data.txt', sep = "\s+")
Dataset.head()

Target_Column = 9
X = Dataset.iloc[:, 0:Target_Column].values
Y = Dataset.iloc[:,   Target_Column].values
X_Train, X_Test, Y_Train, Y_Test = train_test_split(X, Y, test_size = 0.3, random_state = 0)


#Define hyperprameters.
Batch_Size    = 2048
Num_Epochs    = 2000
Size_Hidden_1 = 128
Size_Hidden_2 = 64
Size_Hidden_3 = 32
Learning_Rate = 0.001
Batch_No                    = len(X_Train) // Batch_Size            # Batches
Num_Columns_Input  = X_Train.shape[1]                          # Number of columns in input matrix
Num_Columns_Output = 1


#Using GPU
Use_CUDA = torch.cuda.is_available()
Device   = torch.device("cuda" if Use_CUDA else "cpu")
print("Executing the model on :",Device)


#Define model and optimizer
class Net(torch.nn.Module):
    def __init__(self, n_feature, size_hidden_1, size_hidden_2, size_hidden_3, n_output):
        super(Net, self).__init__()
        self.hidden1 = torch.nn.Linear(Num_Columns_Input,  Size_Hidden_1)   # Hidden layer 1
        self.hidden2 = torch.nn.Linear(Size_Hidden_1,      Size_Hidden_2)        # Hidden layer 2
        self.hidden3 = torch.nn.Linear(Size_Hidden_2,      Size_Hidden_3)        # Hidden layer 3
        self.predict = torch.nn.Linear(Size_Hidden_3, Num_Columns_Output)   # Output layer

    def forward(self, x):
        x = F.relu(self.hidden1(x)) 
        x = F.relu(self.hidden2(x)) 
        x = F.relu(self.hidden3(x)) 
        x = self.predict(x) 
        return x

net = Net(Num_Columns_Input, Size_Hidden_1, Size_Hidden_2, Size_Hidden_3, Num_Columns_Output)
if torch.cuda.is_available():
    device = "cuda:0"
    if torch.cuda.device_count() > 1:
        net = nn.DataParallel(net)
net.to(device)

optimizer = torch.optim.Adam(net.parameters(), lr = Learning_Rate)
criterion = torch.nn.MSELoss() 


# Training model
Running_Loss = 0.0

start_time = time.time()

for Epoch in range(Num_Epochs):

    X_Train, Y_Train = shuffle(X_Train, Y_Train)
    
    # Mini batch learning
    for i in range(Batch_No):
        
        start  = i * Batch_Size
        end    = start + Batch_Size
        inputs = Variable(torch.FloatTensor(X_Train[start:end])).to(Device)
        labels = Variable(torch.FloatTensor(Y_Train[start:end])).to(Device)
        
        # zero the parameter gradients
        optimizer.zero_grad()

        # forward + backward + optimize
        outputs = net(inputs)
        loss = criterion(outputs, torch.unsqueeze(labels,dim = 1))
        loss.backward()
        optimizer.step()

        # print statistics
        Running_Loss += loss.item()
        
    if(Epoch % 100 == 0): print('Epoch {}'.format(Epoch), "loss: ",Running_Loss)
    
    #scheduler.step()
    
    Running_Loss = 0.0
print("Calculation time :", time.time() - start_time)

The training output shows saturated loss which is not decreasing:
Epoch 0 loss:  82637.44604492188
Epoch 100 loss:  3913.1080932617188
Epoch 200 loss:  3164.8107986450195
Epoch 300 loss:  3010.6801147460938
Epoch 400 loss:  2929.7017517089844
Epoch 500 loss:  2904.999656677246
Epoch 600 loss:  2887.5707092285156
Epoch 700 loss:  2891.483169555664
Epoch 800 loss:  2877.9163970947266
Epoch 900 loss:  2891.381019592285
Epoch 1000 loss:  2870.423141479492
Epoch 1100 loss:  2887.0635833740234
Epoch 1200 loss:  2889.669761657715
Epoch 1300 loss:  2891.597194671631
Epoch 1400 loss:  2881.264518737793
Epoch 1500 loss:  2884.085250854492
Epoch 1600 loss:  2883.3774032592773
Epoch 1700 loss:  2883.196922302246
Epoch 1800 loss:  2891.262664794922
Epoch 1900 loss:  2888.922218322754
How can I fix this problem?
Any comments are highly appreciated!