In the first glance, your code looks fine to me.

Can you plot your loss values after each epoch for getting a clearer picture? The logit prediction values themselves don’t reveal much.
To make sure that your code is correct, experiment with a small sample and overfit your model to it (ie bring down the training loss to almost zero). To keep it simple, you can first try with BCELoss (instead of CrossEntropy with Probabilities).
Try out AdamOptimizer and a small learning rate.
If the train loss value is not decreasing, your model may be too simple. Try adding an LSTM (or similar sequence layer).