'Perform the L_2 attack on the given images for the given targets.
If self.targeted is true, then the targets represents the target labels
If self.targeted is false, then targets are the original class labels'

def attack(self, imgs, targets):

    r = []
    for i in range(0, len(imgs), self.batch_size):
        r.extend(self.attack_batch(imgs[i:(i + self.batch_size)], targets[i:(i + self.batch_size)]))
    return np.array(r)
