I am using BCEwithlogitsloss loss function, and this is the trainer function i defined.
def trainer(train_data, epochs):
  globaliter = 0
  x = []
  y = []
  for epoch in tqdm(range(epochs)):  
    epoch_loss = 0 
    epoch_acc = 0
    epoch_size = 0
    for batch in tqdm(train_data):
        globaliter += 1
        src = Variable(batch['text']).cuda()
        out = model(src)
        out = out.squeeze()
        trg = Variable(batch['sentiment']).cuda()
        loss = criterion(out, trg)
        loss.backward()    
        optimizer.step()
        epoch_loss += loss.item()
        acc = binary_accuracy(out, trg)
        epoch_acc += acc.item()
    y.append(epoch_loss/len(train_data))
    x.append(epoch+1)
  return x,y 

I will try and see what happens if i decrease my lr even more.