python - 给出 AttributeError 的示例代码:“AdamOptimizer”对象没有属性“_beta1_power”
问题描述
我正在尝试在演示部分运行示例./quick_scripts/celebA_superres.sh "./images/182659.jpg" 。我是 python 新手并收到以下错误:
AttributeError:“AdamOptimizer”对象没有属性“_beta1_power”
据我所知,一个名为“AdamOptimizer”的对象的实例不知道如何处理这种类型的变量。代码如下:
def get_opt_reinit_op(opt, var_list, global_step):
opt_slots = [opt.get_slot(var, name) for name in opt.get_slot_names() for var in var_list]
if isinstance(opt, tf.train.AdamOptimizer):
opt_slots.extend([opt._beta1_power, opt._beta2_power]) #pylint: disable = W0212
all_opt_variables = opt_slots + var_list + [global_step]
opt_reinit_op = tf.variables_initializer(all_opt_variables)
return opt_reinit_op
该行opt_slots.extend([opt._beta1_power, opt._beta2_power]) #pylint: disable = W0212
产生错误的位置。
我没有看到“AdamOptimizer”。我猜它藏在里面opt
?我该如何调试这样的事情?这种调试有好的做法吗?
我应该提到我使用 2to3 将代码转换为 python3。这有什么重要的吗?
附加完整的回溯:
回溯(最后一次调用):文件“./src/compressed_sensing.py”,第 177 行,在 main(HPARAMS) 文件“./src/compressed_sensing.py”,第 21 行,在 main estimators = utils.get_estimators(hparams ) 文件“/home/erezsh/Projects/CSGM/csgm3/src/utils.py”,第 98 行,在 get_estimators estimators = {model_type: get_estimator(hparams, model_type) for model_type in hparams.model_types} 文件“/home/erezsh /Projects/CSGM/csgm3/src/utils.py”,第 98 行,在 estimators = {model_type: get_estimator(hparams, model_type) for model_type in hparams.model_types} 文件“/home/erezsh/Projects/CSGM/csgm3/src /utils.py”,第 91 行,在 get_estimator estimator = celebA_estimators.dcgan_estimator(hparams) 文件“/home/erezsh/Projects/CSGM/csgm3/src/celebA_estimators.py”,第 185 行,在 >dcgan_estimator opt_reinit_op = utils.get_opt_reinit_op(opt, var_list, global_step) 文件“/home/erezsh/Projects/CSGM/csgm3/src/utils.py”,第 545 行,在 >get_opt_reinit_op opt_slots.extend([opt._beta1_power, opt._beta2_power]) #pylint: disable = >W0212 AttributeError: 'AdamOptimizer' 对象没有属性 '_beta1_power'
解决方案
AdamOptimizer 肯定隐藏在 opt 中:引发错误的行仅在isinstance
确定 opt 是tf.train.AdamOptimizer
if isinstance(opt, tf.train.AdamOptimizer):
opt_slots.extend([opt._beta1_power, opt._beta2_power])
我不认为 2to3 应该归咎于此,我宁愿希望您安装的 TensorFlow 版本太新。csgm
列表 TensorFlow 1.0.1的要求。在这个版本中_beta1_power
,_beta2_power
仍然是 AdamOptimizer 的属性。这已在1.6 版中进行了更改,现在beta1_power
并beta2_power
在需要它们的功能中本地分配。您可能可以通过调用_get_beta_accumulators()
oprimizer 来获取这些值,但我猜它会在下一个最佳时机中断,新版本的行为会有所不同。
推荐阅读
- shell - 通过 shell 或 linux 命令增加文件名编号
- tomcat - k8s pod启动时启动tomcat后运行脚本
- java - 无法更改 Webview 语言
- mongodb - mongo获取月份和年份范围内的数据
- python - Django Rest - 序列化器:必须是创建时的实例
- mysql - 每月统计客户无法起诉 Laravel 查询生成器
- windows - 在 Windows 10 中以高对比度的暗模式使用 Visual Studio 2019
- rancher - Rancher CLI 登录错误 - 状态 [401 未授权]。正文:[message=clusterID 不匹配]
- c# - 如何从 Windows 窗体应用程序写入文本文件
- r - Mplus vs lavaan 报告的自由参数数量