Не удалось создать состязательные примеры с использованием обученных моделей NSGA- Net PyTorch - PullRequest
1 голос
/ 03 августа 2020

Я использовал поиск нейронной архитектуры NSGA- Net для создания и обучения нескольких архитектур. Я пытаюсь создать состязательные примеры PGD, используя мои обученные модели PyTorch. Я пробовал использовать как Adversarial Robustness Toolbox 1.3 (ART), так и torchattacks 2.4, но получаю ту же ошибку.

Эти несколько строк кода описывают основные функции моего кода и то, что я пытаюсь достичь здесь:

# net is my trained NSGA-Net PyTorch model

# Defining PGA attack

pgd_attack = PGD(net, eps=4 / 255, alpha=2 / 255, steps=3)

# Creating adversarial examples using validation data and the defined PGD attack

for images, labels in valid_data:
    images = pgd_attack(images, labels).cuda()
    outputs = net(images)


Итак, вот как обычно выглядит ошибка:

Traceback (most recent call last):
  File "torch-attacks.py", line 296, in <module>
    main()
  File "torch-attacks.py", line 254, in main
    images = pgd_attack(images, labels).cuda()
  File "\Anaconda3\envs\GPU\lib\site-packages\torchattacks\attack.py", line 114, in __call__
    images = self.forward(*input, **kwargs)
  File "\Anaconda3\envs\GPU\lib\site-packages\torchattacks\attacks\pgd.py", line 57, in forward
    outputs = self.model(adv_images)
  File "\envs\GPU\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "\codes\NSGA\nsga-net\models\macro_models.py", line 79, in forward
    x = self.gap(self.model(x))
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\container.py", line 100, in forward
    input = module(input)
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "\codes\NSGA\nsga-net\models\macro_decoder.py", line 978, in forward
    x = self.first_conv(x)
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\conv.py", line 345, in forward
    return self.conv2d_forward(input, self.weight)
  File "\Anaconda3\envs\GPU\lib\site-packages\torch\nn\modules\conv.py", line 342, in conv2d_forward
    self.padding, self.dilation, self.groups)
RuntimeError: Expected object of scalar type Float but got scalar type Double for argument #2 'weight' in call to _thnn_conv2d_forward

Я использовал тот же код с простой моделью PyTorch, и он работал, но я использую NSGA- Net поэтому я сам не проектировал эту модель. Я также пробовал использовать .float() как на модели, так и на входах, но по-прежнему получал ту же ошибку.

Имейте в виду, что у меня есть доступ только к следующим файлам:

  • torch- Attack.py
  • macro_models.py
  • macro_decoder.py

1 Ответ

1 голос
/ 03 августа 2020

Вы должны преобразовать images в желаемый тип (images.float() в вашем случае). Ярлыки должны не преобразовываться в любой плавающий тип. Они могут быть тензорами int или long.

...