Hi Sunakutra!
I haven’t looked at all of your code, but I do see some issue, noted
in line, below:



 Sunakutra76:

class NeuralNetwork(nn.Module):
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(d, n, bias=False),
            nn.Linear(n, 6),



This won’t “break” your model (or cause it to return zeroes), but
two Linears in a row – without an intervening non-linearity – are
redundant, and should be replaced by a single Linear (d, 6).


            ...
            nn.Linear(5, 1),
            nn.ReLU()
          )



This could be your problem.  Using a final ReLU layer to output your
predictions is a poor choice.  If your last Linear happens to generate
negative values, ReLU will output zero and will have zero gradient
when you backpropagate, so your optimizer won’t know in what
direction to move to get you “unstuck” out of the flat (zero gradient)
part of ReLU.
At the least you could try something like LeakyReLU 2, but I would
recommend removing the final ReLU, and letting your MSELoss and
backpropagation “learn” to predict positive values.  (Here I assume
that you a training with “target” prices that are always positive.)


            pred = model(X)
            test_loss += loss_fn(pred, y).item()
            correct += float((pred == y).sum()) 



Your accuracy prediction will fail here.  You are testing for exact
equality between two floating-point number which will almost never
be true (except for some special cases).  Since you’re predicting
continuous values (rather than classes or categories) you should
use something like your MSELoss as a figure of merit.  You could
also count the number of “correct” predictions by defining “correct”
to be a prediction that is within a certain absolute amount or within
a certain percentage of the ground-truth value.
Best.
K. Frank