【问题标题】:PyTorch - "Attribute Error: module 'torch' has no attribute 'float'PyTorch - “属性错误:模块‘火炬’没有属性‘浮动’
【发布时间】:2020-03-21 15:02:35
【问题描述】:

我正在尝试从here 实施空间变压器网络,我遇到了这个问题:

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'

我该如何解决这个问题?

【问题讨论】:

  • 请始终发布完整的错误回溯。你用的是什么pytorch版本?

标签: python pytorch


【解决方案1】:
  • 关于AttributeError

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

    这个AttributeError 暗示代码中的某处必须类似于torch.float

    在您的代码示例中,我找不到类似的东西。 但是,link you referenced for the code 包含以下行:

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

    torch.float 这样的PyTorch 数据类型随PyTorch 0.4.0 一起提供,所以当你在0.3.1 等早期版本中使用像torch.float 这样的东西时,你会看到这个错误,因为torch then 实际上没有属性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(它甚至显示回溯中的新代码)。这有点令人困惑,因为回溯会显示一个对给定行没有意义的错误。

    在这种情况下重启内核会有所帮助。

【讨论】:

    【解决方案2】:

    尝试通过以下方式重新安装 pytorch:

    pip uninstall pytorch
    

    然后:

    pip install pytorch
    

    【讨论】:

    • 不应该是pip unistall torch和pip install torch吗?
    【解决方案3】:

    使用以下命令从频道“soumith”安装 pytorch 后出现同样的错误:

    conda install -c soumith pytorch
    

    从 pytorch 频道重新安装后一切正常。在我的情况下,命令如下所示:

    conda install pytorch-cpu torchvision-cpu -c pytorch
    

    但是您必须从该站点获取您机器的包装清单: https://pytorch.org/

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2021-12-23
      • 2018-04-29
      • 2020-02-09
      • 2021-09-22
      • 2022-06-27
      • 2023-04-04
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多