PyTorch - «Ошибка атрибута: модуль« torch »не имеет атрибута« float » - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь реализовать Пространственную Трансформаторную Сеть из здесь , и я сталкиваюсь с этой проблемой:

class STNLayer(torch.nn.Module):
    def __init__(self, input_size):
        super(STNLayer, self).__init__()
        self.input_size = input_size
        self.localization = nn.Sequential(
            nn.Conv2d(self.input_size, 8, kernel_size = 7),
            nn.MaxPool2d(2, stride = 2),
            nn.ReLU(True),
            nn.Conv2d(8, 10, kernel_size = 5),
            nn.MaxPool2d(2, stride = 2),
            nn.ReLU(True)
        )

        self.fc_loc = nn.Sequential(
            nn.Linear(10 * 12 * 12, 32),
            nn.ReLU(True),
            #nn.BatchNorm1d(32),
            nn.Linear(32, 3*2)
        )

        # Initialize weights to identity transformation
        self.fc_loc[2].weight.data.zero_()
        self.fc_loc[2].bias.data = torch.cuda.FloatTensor([1,0,0,0,1,0])

Линия

self.fc_loc[2].bias.data = torch.cuda.FloatTensor([1,0,0,0,1,0])

выдаёт ошибку:

*** AttributeError: module 'torch' has no attribute 'float'

Как мне это исправить?

Ответы [ 3 ]

0 голосов
/ 14 июня 2018

У меня такая же ошибка после установки pytorch из канала "soumith" с этой командой:

conda install -c soumith pytorch

После переустановки из канала pytorch все работает нормально.В моем случае команда выглядит так:

conda install pytorch-cpu torchvision-cpu -c pytorch

Но вы должны получить список пакетов для вашего компьютера с этого сайта: https://pytorch.org/

0 голосов
/ 08 ноября 2018
  • О AttributeError

    AttributeError: module 'torch' has no attribute 'float'
    

    Это AttributeError подразумевает, что где-то в коде должно быть что-то вроде torch.float.

    В вашем примере кода я не могу найти ничего подобного.Однако ссылка , на которую вы ссылались для кода , содержит следующую строку:

    self.fc_loc[2].bias.data.copy_(torch.tensor([1, 0, 0, 0, 1, 0], dtype=torch.float))
    

    Типы данных PyTorch, такие как torch.float, поставляются с PyTorch 0.4.0 , поэтомукогда вы используете что-то вроде torch.float в более ранних версиях, таких как 0.3.1 , вы увидите эту ошибку, потому что torch тогда фактически не имеет атрибута float.

    Если у вас есть строка, как в примере, который вы связали, то вполне логично получить такую ​​ошибку.Для кода, который вы разместили, это не имеет смысла.

    Поскольку вы не включили полную трассировку ошибок, я могу только догадываться, в чем проблема.Поэтому, вероятно, вы либо где-то использовали torch.float в своем коде, либо импортировали некоторый код с помощью torch.float.

  • Так что вы можете сделать, чтобы это исправить?

    Самый простой способ - просто обновить PyTorch до версии 0.4.0 или выше.

    Если вы не хотите обновляться или не можете это сделать по какой-либо причине.Вам просто нужно найти строку (или строки), где используется torch.float, и изменить ее.

    Так что, вероятно, что-то вроде этого:

    torch.tensor([1, 0, 0, 0, 1, 0], dtype=torch.float)
    

    и измените его на:

    torch.FloatTensor([1,0,0,0,1,0])
    

    Аналогично строке, которую вы разместили в своем вопросе.

    Надеюсь, это поможет!


  • Краткое дополнение для Jupyter Notebook:

    Это всего лишь побочный узел, потому что ваш код и сообщение об ошибке не совпадают: при импорте кода в Jupyter Notebook безопаснее всего перезапустить ядро ​​после внесения изменений в импортированный код.В противном случае уже загруженные модули пропускаются при импорте и изменения не применяются.Таким образом, если в старом коде произошла ошибка, эта ошибка все еще может возникать, и трассировка затем указывает на строку, которую вы только что исправили.

    Так, например, при изменении в импортированном коде:torch.tensor([1, 0, 0, 0, 1, 0], dtype=torch.float) до torch.FloatTensor([1,0,0,0,1,0]) он все еще может жаловаться на torch.float, даже если строка больше не содержит torch.float (он даже показывает новый код в трассировке).Это немного сбивает с толку, потому что затем трассировка показывает ошибку, которая не имеет смысла для данной строки.

    В таком случае помогает перезапуск ядра.

0 голосов
/ 02 июня 2018

Попробуйте переустановить pytorch:

pip uninstall pytorch

, а затем:

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