gpt4 book ai didi

keras - 函数式 API/Multi Input 模型超参数优化

转载 作者:行者123 更新时间:2023-12-03 17:28:51 24 4
gpt4 key购买 nike

我发现的唯一适用于 Keras 函数式 API 的超参数优化库是 Talos。

https://github.com/autonomio/talos/blob/9890d71d31451af3d7e8d91a75841bc7904db958/docs/Examples_Multiple_Inputs.md

有谁知道还有其他人可以工作吗?

最佳答案

您可以使用带有交叉验证的 Sklearn 网格搜索来执行 Keras 超参数调整。

要使用 Sequential Keras 模型(仅限单输入)执行网格搜索,您必须使用 Keras Wrappers for the Scikit-Learn API 将这些模型转换为与 sklearn 兼容的估计器.

A sklearn estimator is a class object with fit(X,y) , predict(x)and scoremethods. (and optionnaly predict_proba method)



无需从头开始,您可以通过实现 keras.wrappers.scikit_learnpackage 中的两个包装器之一,将 Sequential Keras 模型用作 Scikit-Learn 工作流程的一部分:
KerasClassifier(build_fn=None, **sk_params): which implements the Scikit-Learn classifier interface.
KerasRegressor(build_fn=None, **sk_params): which implements the Scikit-Learn regressor interface.

参数
build_fn: callable function or class instance the should construct, compile and return a Keras model, which will then be used to fit/predict.
sk_params: model parameters & fitting parameters.

Note that like all other estimators in scikit-learn, build_fn should provide default values for its arguments, so that you could create the estimator without passing any values to sk_params.



示例:使用 Keras 进行简单的二元分类

实现 Keras 模型创建器功能

我们想要微调这些超参数: 优化器、dropout_rate、kernel_init 方法和密集层大小。

这些参数必须在 的签名中定义创建模型()功能与 默认参数 .如果需要,您可以添加其他超参数,例如 learning_rate,...

binary_crossentropy 非常适合二分类问题。
def create_model(dense_layer_sizes, optimizer="adam", dropout=0.1, init='uniform', nbr_features=2500, dense_nparams=256):
model = Sequential()
model.add(Dense(dense_nparams, activation='relu', input_shape=(nbr_features,), kernel_initializer=init,))
model.add(Dropout(dropout), )
for layer_size in dense_layer_sizes:
model.add(Dense(layer_size, activation='relu'))
model.add(Dropout(dropout), )
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=optimizer,metrics=["accuracy"])
return model

创建类似 sklearn 的估算器

这是一个分类问题,所以我们使用 KerasClassifier 包装器。
kears_estimator = KerasClassifier(build_fn=create_model, verbose=1)

定义超参数空间

我们在这里定义我们的 超参数空间 包括 keras 拟合超参数 : 时代 批量大小 :
# define the grid search parameters
param_grid = {
epochs': [10, 100, ],
dense_nparams': [32, 256, 512],
init': [ 'uniform', 'zeros', 'normal', ],
batch_size':[2, 16, 32],
optimizer':['RMSprop', 'Adam', 'Adamax', 'sgd'],
dropout': [0.5, 0.4, 0.3, 0.2, 0.1, 0]
}

最后使用 KFold 交叉验证执行网格搜索
kfold_splits = 5
grid = GridSearchCV(estimator=kears_estimator,
n_jobs=-1,
verbose=1,
return_train_score=True,
cv=kfold_splits, #StratifiedKFold(n_splits=kfold_splits, shuffle=True)
param_grid=param_grid,)

grid_result = grid.fit(X, y, )

# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
print("%f (%f) with: %r" % (mean, stdev, param))

关于keras - 函数式 API/Multi Input 模型超参数优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57940947/

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