Попытка перевернуть график во второй раз, но буферы уже освобождены - PullRequest
0 голосов
/ 14 июня 2019

В настоящее время я пытаюсь закодировать метод классного наименее вероятного класса на примере MNIST. Однако, когда num_steps> 1, этот код не запускается. Я не могу найти способ повторения более одного раза.

'''python
def ll_attack(model, criterion, images, alpha, epsilon, num_steps=2):
    outputs = model(images)
    idx = torch.min(outputs,1)[1]
    idx = idx.detach_()

    for i in range(num_steps):
        ouputs = model(images)

        model.zero_grad()
        loss = criterion(outputs, idx).to(device)
        loss.backward()
        pertubed_images = images - alpha*images.grad.sign()

        out = torch.clamp(pertubed_images, -epsilon, epsilon).detach_()

    return out

correct = 0

total = 0
criterion = torch.nn.CrossEntropyLoss()
for images, labels in test_loader:
    images=images.to(device)
    labels=labels.to(device)

    images.requires_grad =True

    pertubed_images = ll_attack(new_net, criterion, images, alpha, epsilon)
    labels = labels.to(device)
    outputs = new_net(pertubed_images)

    adv_pred = torch.max(outputs.data, 1)[1]

    total += 64
    correct += (adv_pred == labels).sum()

print('Accuracy:{}'.format(int(correct)/total))`
'''

RuntimeError: Попытка перевернуть график во второй раз, но буферы уже освобождены. Укажите retain_graph = True при обратном вызове в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...