There is an another problem with the Epsilon Vs. Accuracy graph. For eps=0, the graph should start from actual validation accuracy. I have a 15K samples with 5 categories and took 20% for validation. When I run the attack, for eps=0, it is printing like this, which is quiet weird:
Epsilon: 0	Test Accuracy = 596 / 3564 = 0.16722783389450055


It should be the 88%, that reported at training the network time.
Could you share some thoughts?
This time changed the loss criterion:
loss = F.nll_loss(output, target)

to
loss = criterion(output, target)
...
...
criterion = nn.CrossEntropyLoss()