PyTorch -“属性错误:模块“torch”没有属性“float”

xvw2m8pv  于 2023-06-06  发布在  其他
关注(0)|答案(3)|浏览(611)

我试图从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'

我该怎么解决?

093gszye

093gszye1#

*关于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实际上没有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(它甚至在回溯中显示新代码)。这有点令人困惑,因为回溯会显示一个错误,而这个错误对给定的行没有意义。
  • 在这种情况下,重新启动内核会有所帮助。*
x6h2sr28

x6h2sr282#

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

pip uninstall pytorch

然后:

pip install pytorch
y0u0uwnf

y0u0uwnf3#

我从通道“soumith”安装pytorch后有相同的错误,使用此命令:

conda install -c soumith pytorch

从pytorch通道重新安装后,所有工作正常。在我的例子中,命令看起来像:

conda install pytorch-cpu torchvision-cpu -c pytorch

但您必须从本网站获取您的机器的软件包列表:https://pytorch.org/

相关问题