我正在尝试在“演示”部分下运行示例./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,在 主(HPARAMS) 主文件中的文件“ ./src/compressed_sensing.py”,第21行 估算器= utils.get_estimators(hparams) get_estimators中的文件“ /home/erezsh/Projects/CSGM/csgm3/src/utils.py”,行98 estimators = {model_type:get_estimator(hparams,model_type)for hparams.model_types中的model_type} 在第98行的“ /home/erezsh/Projects/CSGM/csgm3/src/utils.py”文件中 estimators = {model_type:get_estimator(hparams,model_type)for hparams.model_types中的model_type} get_estimator中的第91行的文件“ /home/erezsh/Projects/CSGM/csgm3/src/utils.py” estimator = celebA_estimators.dcgan_estimator(hparams) > dcgan_estimator中的文件“ /home/erezsh/Projects/CSGM/csgm3/src/celebA_estimators.py”,行185 opt_reinit_op = utils.get_opt_reinit_op(opt,var_list,global_step) > get_opt_reinit_op中的文件“ /home/erezsh/Projects/CSGM/csgm3/src/utils.py”,第545行 opt_slots.extend([opt._beta1_power,opt._beta2_power])#pylint:disable => W0212 AttributeError:“ AdamOptimizer”对象没有属性“ _beta1_power”
答案 0 :(得分:2)
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
and _beta2_power
have still been attributes of the AdamOptimizer.已在version 1.6中进行了更改,现在beta1_power
和beta2_power
在需要它们的函数中本地分配。
您可能可以通过在oprimizer上调用_get_beta_accumulators()
来获取值,但是我猜想,在新版本的行为有所不同的下一个最佳情况下,它将中断。