我试图从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'
我该怎么解决?
3条答案
按热度按时间093gszye1#
*关于
AttributeError
这个
AttributeError
意味着代码中的某个地方必须是类似torch.float
的东西。在您的代码示例中,我找不到任何类似的内容。但是,link you referenced for the code包含以下行:
像
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])
,它可能仍然会抱怨torch.float
,即使该行不再包含torch.float
(它甚至在回溯中显示新代码)。这有点令人困惑,因为回溯会显示一个错误,而这个错误对给定的行没有意义。x6h2sr282#
尝试通过以下方式重新安装pytorch:
然后:
y0u0uwnf3#
我从通道“soumith”安装pytorch后有相同的错误,使用此命令:
从pytorch通道重新安装后,所有工作正常。在我的例子中,命令看起来像:
但您必须从本网站获取您的机器的软件包列表:https://pytorch.org/