示例代码给出AttributeError:'AdamOptimizer'对象没有属性'_beta1_power'

时间:2018-07-09 08:52:29

标签: python debugging tensorflow

我正在尝试在“演示”部分下运行示例./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”

1 个答案:

答案 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_powerbeta2_power在需要它们的函数中本地分配。 您可能可以通过在oprimizer上调用_get_beta_accumulators()来获取值,但是我猜想,在新版本的行为有所不同的下一个最佳情况下,它将中断。