尝试使用tensorflow 2.0中的tensorflow.plugins.hparams创建一组不同的优化器

尝试使用tensorflow 2.0中的tensorflow.plugins.hparams创建一组不同的优化器,tensorflow,keras,deep-learning,hyperparameters,Tensorflow,Keras,Deep Learning,Hyperparameters,我正在尝试使用tensorflow.plugins.hparams调整神经网络的超参数 在本文中,它给出了如何使用该函数调整超参数的建议代码 如所提供的链接中所示,可以使用以下内容: HP\u NUM\u UNITS=HP.HParam('NUM\u UNITS',HP.Discrete([16,32])) HP_DROPOUT=HP.HParam('DROPOUT',HP.RealInterval(0.1,0.2)) HP_OPTIMIZER=HP.HParam('OPTIMIZER',HP.

我正在尝试使用tensorflow.plugins.hparams调整神经网络的超参数

在本文中,它给出了如何使用该函数调整超参数的建议代码

如所提供的链接中所示,可以使用以下内容:

HP\u NUM\u UNITS=HP.HParam('NUM\u UNITS',HP.Discrete([16,32]))
HP_DROPOUT=HP.HParam('DROPOUT',HP.RealInterval(0.1,0.2))
HP_OPTIMIZER=HP.HParam('OPTIMIZER',HP.Discrete(['adam','sgd']))
公制精度=‘精度’
使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
hp.hparams\u配置(
hparams=[HP\u NUM\u单位,HP\u辍学,HP\u优化器],
metrics=[hp.Metric(Metric\u accurity,display\u name='accurity'),
)
def系列测试模型(hparams):
模型=tf.keras.models.Sequential([
tf.keras.layers.flatte(),
tf.keras.layers.Dense(hparams[HP_NUM_UNITS],activation=tf.nn.relu),
tf.keras.layers.Dropout(HP参数[HP_Dropout]),
tf.keras.layers.Dense(10,活化=tf.nn.softmax),
])
model.compile(
优化器=hparams[HP\u优化器],
损失=“稀疏”\u分类”\u交叉熵',
指标=[“准确度”],
)
model.fit(x_-train,y_-train,epochs=1)#使用1个epoch运行以加速演示
_,准确度=模型。评估(x_检验,y_检验)
返回精度
我将把重点放在下一行,因为我把它作为我想做的事情的参考。 该行:

tf.keras.layers.density(hparams[HP\u NUM\u UNITS],activation=tf.nn.relu),
我最终要做的是创建一组不同类型的优化器,它们具有不同的学习率、衰减率、beta_1和beta_2值等。这就是我尝试做的:

HP_LR=HP.HParam('learning_rate',HP.Discrete([0.01,0.005,0.001,0.0005,0.0001,0.00005,0.00001,0.000005,0.000001,0.0000005,0.0000001]))
HP_MOM1=HP.HParam('动量β1',HP.离散([0.9,0.99,0.999,0.9999,0.99999]))
HP_MOM2=HP.HParam('beta2',HP.离散([0.99,0.999,0.9999,0.99999,0.99999]))
HP_BOOL=HP.HParam('amsgrad',HP.Discrete(['True','False'))
度量损失='dl\U tf\U损失'
使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
hp.hparams\u config(hparams=[hp\u LR,hp\u MOM1,hp\u MOM2,hp\u BOOL],metrics=[hp.Metric(Metric\u LOSS,display\u name='LOSS'),)
那很好,但我试着去做

sgd=keras.optimizers.sgd(hparams[HP\u LR],decation=0,moment=hparams[HP\u MOM1],nesterov=hparams[HP\u BOOL])
我得到以下错误:

keyrerror回溯(最近一次调用)
在()
---->1 sgd=keras.optimizers.sgd(hparams[HP\u LR],decation=0,moment=hparams[HP\u MOM1],nesterov=hparams[HP\u BOOL])
2#RMSprop=keras.optimizers.RMSprop(lr=hparams[HP#u lr],rho=0.9,ε=None,衰减=0.0)
3#adam=keras.optimizers.adam(lr=hparams[HP\u lr],beta\u 1=hparams[HP\u MOM1],beta\u 2=hparams[HP\u MOM2],epsilon=None,decay=0.0,amsgrad=hparams[HP\u BOOL])
4.
5#HP#U OPTIMIZER=HP.HParam('optimizers',HP.Discrete([sgd,RMSprop,adam]))
KeyError:HParam(name='learning_rate',domain=Discrete([1e-07,5e-07,1e-06,5e-06,1e-05,5e-05,0.0001,0.0005,0.001,0.005,0.01]),display_name=None,description=None)
如果有人能让我了解如何使用不同的学习率、衰减等集合创建一组不同的优化器,我将不胜感激


谢谢

这不是一个真正的答案,但太长了,无法发表评论

我也遇到过类似的问题。当HParams字典到达您的模型时通过tensorflow估计器传递时,您不能再使用您定义的导入的HP密钥来查找它们。我不知道这是否与它们被复制有关,但如果你不通过模型传递它们,它就可以正常工作

在tensorflow中对Keras模型使用Ray Tune时,我也遇到了同样的问题。我通过将tune配置解析为我的超参数推迟到最后一刻解决了这个问题

跨文件使用HParam似乎确实存在问题,但我不确定真正的原因是什么