Hi,
Note that it would be better to replace:
        L_smia.backward()
        eta = epsilon * attack_image.grad.data.sign()

by
        grad, = autograd.grad(L_smia, attack_image)
        eta = epsilon * grad

For your issue, what is the value of alpha?
Also you can check the gradients flowing back by using hooks: on any Tensor, you can set t.register_hook(your_fn). So that your_fn will be called for the gradient for that Tensor. That way you can check what are the gradient values flowing on the right part of your model.