'SGD' object has no attribute 'defaults'
时间: 2023-10-19 21:08:24 浏览: 397
这个错误通常出现在使用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不支持这种方法。
AttributeError: 'SGD' object has no attribute 'SGD'
该错误是因为在keras.optimizers模块中没有名为'SGD'的属性。解决此问题的方法是使用正确的优化器名称。
您引用的第二个参考文献中给出的代码中使用了'SGD'优化器。然而,在最新版本的Keras中,SGD优化器被更改为小写字母。因此,正确的优化器名称应为'sgd'而不是'SGD'。
要解决此错误,请将代码中的优化器名称更改为小写字母。例如:
sgd = optimizers.sgd(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
这样应该可以解决该错误。
如果您在保存训练好的模型时遇到类似的错误,请确保使用的是正确的优化器名称,并检查模型的保存方式是否正确。
阅读全文