blade:

I see my loss increase from zero to 20 and then dives deep into negative realm. I was wondering if my implementation is correct.


Notice that you are doing running_loss += objective.item() which is essentially adding up the loss from the previous epochs as well. Every iteration (in your code) constitutes an epoch because you are sending in all the features at once. Does it make sense?
Something like:
running_loss = []
for _ in range(1000):
    ...
    running_loss.append(objective.item())
    ...
print(running_loss)

should do.