I am working on a linear model to make predictions. The problem I am having is that my loss is higher than my actual values to be predicted. To see if it is a problem with the data I have printed at several spots throughout trying to find if there are any disparities in the data but I find none. I have even tried leaking the expected values, making the inputs and labels the same. Loss is still extremely high. Hoping for some guidance. Below is the code for my model.
train_target = th.tensor(df["Label"].values.astype(np.float32))
train = th.tensor(df.drop("Label",axis=1).values.astype(np.float32))
train_data = TensorDataset(train, train_target)
train_dl = DataLoader(train_data, batch_size = batch_size, shuffle=True)

print(train_target.shape)
class LinReg(nn.Module):
    # Init layers
    def __init__(
        self,
        in_dim: int = 13,
        out_dim: int = 1,
        latent_base: int = 128,
        dropout: float = 0.5):

        super(LinReg, self).__init__()
        self.net = nn.Sequential(
            nn.Dropout(dropout),
            nn.Linear(in_dim, latent_base),
            nn.PReLU(),
            nn.Dropout(dropout),
            nn.Linear(latent_base, 1)
        )
    
    # Forward
    def forward(self, x: th.Tensor) -> th.Tensor:
        return self.net(x)


model = LinReg()
model.cuda()

optimizer = th.optim.RMSprop(model.parameters(), lr = 1e-3)
criterion = nn.L1Loss()

for i in range(epochs):
    for inputs, labels in train_dl:
        y_pred = model(inputs.to(device))
        loss = criterion(y_pred, labels.to(device))
        loss.backward()
        optimizer.zero_grad()
        optimizer.step()
        if i == (epochs-1):
            pred =  y_pred
            y = labels
    if i%1==0:
        print('Epoch {}, Loss: {}'.format(i, loss.item()))