Thanks for the code!
It looks like the model tends to predict a constant value for the data.
Since you are feeding each sample one by one in the training loop and updating the parameters of the model for each sample, you might force the model to update the predictions for each sample.
If you get rid of the for loop and feed the whole data as a batch during training, the predictions will also be constant.
Generally, your values are really high, so that normalizing them should yield better results.
Since you are dealing with values > 1e8, I would assume that the sigmoid output is basically saturated for each input, which is probably the reason for the constant output.
Let me know, if that helps somehow.