megvii-research / hpman

A hyperparameter manager for deep learning experiments.
MIT License
95 stars 11 forks source link

Raise DoubleAssignmentException in IPython #22

Open DIYer22 opened 4 years ago

DIYer22 commented 4 years ago

When %run second time in IPython, will raise DoubleAssignmentException

In [1]: %run examples/00-basic/main.py                                                                             
0.001
0.01

In [2]: %run examples/00-basic/main.py                                                                             
---------------------------------------------------------------------------
DoubleAssignmentException: Duplicated default values:
First occurrence:
/home/yanglei/mygit/hpman/examples/00-basic/main.py:8
     3: # forward static parsing
     4: _.parse_file(__file__)
     5: print(_.get_value("learning_rate"))
     6: 
     7: # define hyperparameters
==>  8: learning_rate = _("learning_rate", 1e-3)
     9: 
    10: # override default value
    11: _.set_value("learning_rate", 1e-2)
    12: print(_.get_value("learning_rate"))
    13: 
Second occurrence:
/home/yanglei/mygit/hpman/examples/00-basic/main.py:8
     3: # forward static parsing
     4: _.parse_file(__file__)
     5: print(_.get_value("learning_rate"))
     6: 
     7: # define hyperparameters
==>  8: learning_rate = _("learning_rate", 1e-3)
     9: 
    10: # override default value
    11: _.set_value("learning_rate", 1e-2)
    12: print(_.get_value("learning_rate"))
DIYer22 commented 4 years ago

My temporary solution is adding

_.db.clear()
_.db.index_count = 0

before _(), _.parse_file()

A better way is adding HyperParameterManager.clear() or HyperParameterManager.manual_init() method for IPython/Jupyter/Spyder users to manual clear _.db.

zxytim commented 4 years ago

Adding a clear() method sounds a reasonable fix for me.