从 “Traceback (most recent call last):... ValueError: Argument(s) not recognized: {'lr': 0.01}” 的报错信息可以看出,在创建SGD优化器时,传入的学习率参数 lr = 0.01 不被识别。这很可能是因为你所使用的Keras版本中,SGD优化器的初始化参数设置方式发生了变化,与你预期的传入参数的方式不一致
该如何解决
有关SGD优化器参数问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢
以下是一些可能的解决方法:
一、检查Keras版本与文档
- 查看文档
- 首先,确定你正在使用的Keras版本。不同版本的Keras在优化器的参数设置上可能会有所不同。例如,在较新的版本中,SGD优化器的参数可能有更严格的定义格式。
- 查看Keras官方文档中关于SGD优化器的部分,了解正确的参数传递方式。例如,在某些版本中,SGD优化器的参数可能需要通过一个字典来传递,像
optimizer = SGD(learning_rate = 0.01),而不是直接写lr = 0.01。
- 版本兼容性
- 如果发现是版本问题,并且升级或降级Keras版本可行的话,可以考虑这样做。例如,如果你的代码是基于较旧版本的Keras编写的,而你当前使用的是较新版本,可能需要调整参数传递方式以匹配新版本的要求。反之,如果当前版本不支持你想要的参数传递方式,且项目允许,你可以尝试降级到支持该方式的版本。
二、代码调整
按照当前版本要求修改参数传递
- 如果文档表明当前版本的SGD优化器需要以特定方式传递学习率,例如通过
learning_rate关键字而不是lr,则修改代码如下:
from keras.optimizers import SGD # 错误的方式 # optimizer = SGD(lr = 0.01) optimizer = SGD(learning_rate = 0.01)- 如果文档表明当前版本的SGD优化器需要以特定方式传递学习率,例如通过
检查其他可能的参数冲突
- 除了学习率参数,还需要检查是否有其他参数也存在类似的不兼容问题。例如,动量(momentum)参数在不同版本中的默认值或者传递方式可能也会改变。如果你的代码中还设置了其他参数,确保它们也符合当前版本的要求。
三、自定义优化器(如果必要)
继承SGD优化器类(高级用法)
- 如果当前版本的SGD优化器不能满足你的需求,并且你对优化器的内部工作原理有一定的了解,你可以考虑继承SGD优化器类并自定义参数传递方式。
```python
from keras.optimizers import SGDclass CustomSGD(SGD):
def __init__(self, **kwargs): # 假设在这个自定义优化器中,你想将lr转换为learning_rate if 'lr' in kwargs: kwargs['learning_rate'] = kwargs.pop('lr') super(CustomSGD, self).__init__(**kwargs)
optimizer = CustomSGD(lr = 0.01)
```
- 这种方法相对复杂,需要对Keras的优化器实现有一定的了解,但在处理特殊需求或者版本不兼容问题时可能会很有用。
解决 无用评论 打赏 举报 编辑记录- 查看文档