【发布时间】:2020-08-29 09:00:42
【问题描述】:
我已经声明了一个 RMSProp 优化器实例
optimizer = tf.keras.optimizers.RMSProp(learning_rate = 0.001)
当我运行这段代码时
optimizer.get_config()
我得到这个输出
{'name': 'RMSprop',
'learning_rate': 0.001,
'decay': 0.0,
'rho': 0.9,
'momentum': 0.0,
'epsilon': 1e-07,
'centered': False}
但是当我运行这段代码时
getattr(optimizer,'name')
我收到了这个错误
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-70-a9eb9a5d971b> in <module>
----> 1 getattr(optimizer,'name')
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py in __getattribute__(self, name)
676 if name in self._hyper:
677 return self._get_hyper(name)
--> 678 raise e
679
680 def __setattr__(self, name, value):
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py in __getattribute__(self, name)
666 """Overridden to support hyperparameter access."""
667 try:
--> 668 return super(OptimizerV2, self).__getattribute__(name)
669 except AttributeError as e:
670 # Needed to avoid infinite recursion with __setattr__.
AttributeError: 'RMSprop' object has no attribute 'name'
我不明白这是为什么。谁能解释一下这有什么问题?
【问题讨论】:
-
那么您可能必须使用
optimizer.get_config()['name']。name字段在您调用的get_config的返回值中显示为字典项,错误告诉您它不是optimizer本身的属性。 -
@RobinDeSchepper 但我没有收到“learning_rate”或“decay”或“rho”等其他属性的错误
-
我对 TensorFlow/Keras (?) 没有任何经验,我正在翻译您帖子中列出的信息 :) 如果我想弄清楚发生了什么,我会采取查看您正在使用的类的文档或源代码,了解哪些属性可用。
-
get_config函数可能只是将类名附加到字典中,而它根本不作为对象的属性存在; dict 的其他字段实际上可能是对象的可配置属性。只是猜测:)
标签: python python-3.x tensorflow keras tf.keras