gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:31:07 25 4
gpt4 key购买 nike

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

在此link ,它给出了如何使用该函数调整超参数的建议代码。

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

HP_NUM_UNITS = hp.HParam('num_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']))

METRIC_ACCURACY = 'accuracy'

with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
hp.hparams_config(
hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER],
metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
)

def train_test_model(hparams):
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(hparams[HP_NUM_UNITS], activation=tf.nn.relu),
tf.keras.layers.Dropout(hparams[HP_DROPOUT]),
tf.keras.layers.Dense(10, activation=tf.nn.softmax),
])
model.compile(
optimizer=hparams[HP_OPTIMIZER],
loss='sparse_categorical_crossentropy',
metrics=['accuracy'],
)

model.fit(x_train, y_train, epochs=1) # Run with 1 epoch to speed things up for demo purposes
_, accuracy = model.evaluate(x_test, y_test)
return accuracy

我将重点关注下一行,因为我将其作为我想做的事情的引用。该行:

tf.keras.layers.Dense(hparams[HP_NUM_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('momentum_beta1',hp.Discrete([0.9,0.99,0.999,0.9999,0.99999]))
HP_MOM2 = hp.HParam('beta2',hp.Discrete([0.99,0.999,0.9999,0.99999,0.999999]))
HP_BOOL = hp.HParam('amsgrad',hp.Discrete(['True','False']))

METRIC_LOSS = 'dl_tf_loss'

with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
hp.hparams_config(hparams=[HP_LR, HP_MOM1, HP_MOM2, HP_BOOL],metrics=[hp.Metric(METRIC_LOSS, display_name='Loss')],)

运行良好,但后来我尝试这样做

sgd=keras.optimizers.SGD(hparams[HP_LR], decay=0, momentum=hparams[HP_MOM1], nesterov=hparams[HP_BOOL])

我收到以下错误:

KeyError                                  Traceback (most recent call last)
<ipython-input-53-1ff09e6440a9> in <module>()
----> 1 sgd=keras.optimizers.SGD(hparams[HP_LR], decay=0, momentum=hparams[HP_MOM1], nesterov=hparams[HP_BOOL])
2 #RMSprop=keras.optimizers.RMSprop(lr=hparams[HP_LR], rho=0.9, epsilon=None, decay=0.0)
3 #adam=keras.optimizers.Adam(lr=hparams[HP_LR], beta_1=hparams[HP_MOM1], beta_2=hparams[HP_MOM2], epsilon=None, decay=0.0, amsgrad=hparams[HP_BOOL])
4
5 #HP_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 估计器传递到您的 model_fn 时,您不能再使用您定义的导入 HP_* 键来查找它们。我不知道这是否与复制它们有关,但如果您不通过 model_fn 传递它们,它就可以正常工作。

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

跨文件使用 HParam 似乎确实存在问题,但我不确定真正导致它的原因。

关于tensorflow - 尝试使用tensorflow 2.0中的tensorflow.plugins.hparams来创建一堆不同的优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56854430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com