'SGD' object has no attribute 'defaults'
时间: 2023-10-19 07:08:24 浏览: 333
这个错误通常出现在使用PyTorch时,它表示您正在尝试访问不存在的属性。在这种情况下,您正在尝试访问SGD优化器的默认值属性,但是该属性不存在。
这可能是因为您使用的版本不同,或者您没有正确导入所需的库。您可以尝试更新PyTorch版本或检查您的导入语句是否正确。
另外,您也可以尝试使用其他优化器,比如Adam,看看是否仍然存在这个问题。
相关问题
AttributeError: 'SGD' object has no attribute 'defaults'
这个错误通常是由于使用了不兼容的PyTorch版本导致的。在PyTorch 1.1中,SGD优化器的默认值已经从`defaults`更改为`defaults_dict`。因此,如果你使用的是旧版本的代码,它可能会尝试访问不存在的属性。要解决这个问题,你需要将代码中的`defaults`更改为`defaults_dict`。例如,如果你的代码如下所示:
```python
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
...
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
...
}, PATH)
```
你需要将其更改为:
```python
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
...
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
...
}, PATH, _use_new_zipfile_serialization=False)
```
注意,你还需要将`_use_new_zipfile_serialization`设置为`False`,以便在保存模型时使用旧的序列化方法。这是因为在PyTorch 1.6中,`torch.save`默认使用新的zipfile序列化方法,而旧版本的PyTorch不支持这种方法。
SGD' object has no attribute 'zero_grad
这个错误提示表明在代码中使用了SGD优化器的zero_grad()方法,但是SGD优化器并没有这个方法。只有继承自torch.optim.Optimizer的优化器才有zero_grad()方法。因此,如果要使用zero_grad()方法,需要使用继承自Optimizer的优化器,例如Adam、Adagrad等。如果要使用SGD优化器,可以使用以下方式清空梯度:
```
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
optimizer.zero_grad()
```