首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用get_best_hyperparameters()生成模型和get_best_models()有什么区别?

使用get_best_hyperparameters()生成模型和get_best_models()有什么区别?
EN

Stack Overflow用户
提问于 2022-05-17 02:07:41
回答 1查看 161关注 0票数 2

在搜索了超参数之后,我尝试了两种方法来获得最佳模型。

一种方法是使用tuner.get_best_hyperparameters()生成模型,如代码片段"A“所示。

另一个是直接使用tuner.get_best_models(),如代码片段"B“中所示。

然后用这两种模型对相同的数据进行预测,预测结果相差很大。

为什么?这两种型号有什么区别?

答:

代码语言:javascript
复制
tuner.search(x_train, y_train)
best_hps=tuner.get_best_hyperparameters(1)[0]
best_model_params = build_model(best_hps)
best_model_params.fit(X, Y)
best_model_params.save("best_model_params_2")

B:

代码语言:javascript
复制
tuner.search(x_train, y_train)
models = tuner.get_best_models(num_models=1)
best_model = models[0]
best_model.fit(X, Y)
best_model.save("best_model_2")
EN

回答 1

Stack Overflow用户

发布于 2022-07-26 13:12:12

这不是一个明确的答案,因为我不确定这里的区别,但它是基于官方文档和教程。从卡拉斯调谐器“开始”关于角调器的PyImageSearch教程,两者都使用选项A。

例如,在官方的keras-tuner教程中,搜索数据子集上的参数,并对最终模型进行如下培训:

代码语言:javascript
复制
# Get the top 2 hyperparameters.
best_hps = tuner.get_best_hyperparameters(2)
# Build the model with the best hp.
model = build_model(best_hps[0])
# Fit with the entire dataset.
x_all = np.concatenate((x_train, x_val))
y_all = np.concatenate((y_train, y_val))
model.fit(x=x_all, y=y_all, epochs=1)

在PyImageSearch教程中,它们执行以下操作:

代码语言:javascript
复制
# build the best model and train it
model = tuner.hypermodel.build(bestHP)
H = model.fit(x=trainX, y=trainY,
    validation_data=(testX, testY), batch_size=config.BS,
    epochs=config.EPOCHS, callbacks=[es], verbose=1)
# evaluate the network
predictions = model.predict(x=testX, batch_size=32)
...

有趣的是,在后面,它们直接从调谐器类中使用tuner.hypermodel.build,而调谐器类仅在API文档中显示。

令人困惑的是,最好的发现是受过训练的还是未经训练的。模型未经训练,如keras-tuner文档所示,它显示了get_best_hyperparameters方法的以下示例:

返回由目标确定的最佳超参数。 该方法可用于恢复搜索过程中发现的(未经过训练的)最佳模型。 示例

代码语言:javascript
复制
best_hp = tuner.get_best_hyperparameters()[0]
model = tuner.hypermodel.build(best_hp)

然而,在get_best_models 文档上,它说它返回了“从最好到最坏的训练的模型实例列表”,但是

为了获得最佳性能,建议使用搜索过程中发现的最佳超参数在完整的数据集上重新培训您的模型,这些参数可以使用tuner.get_best_hyperparameters()获得。模型加载与其最佳检查点对应的权重(在最佳试验的最佳时代结束时)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72267435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档