Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras 函数API/多输入模型超参数优化_Keras_Scikit Learn_Hyperparameters_Talos - Fatal编程技术网

Keras 函数API/多输入模型超参数优化

Keras 函数API/多输入模型超参数优化,keras,scikit-learn,hyperparameters,talos,Keras,Scikit Learn,Hyperparameters,Talos,我发现的唯一一个与Keras函数API一起工作的超参数优化库是Talos 有人知道还有其他方法可以工作吗?您可以使用Sklearn Grid Search和交叉验证执行Keras超参数调整 要使用顺序Keras模型(仅单输入)执行网格搜索,必须使用将这些模型转换为sklearn兼容的估计量 sklearn估计器是一类具有拟合(X,y)、预测(X)和 评分方法。(和期权分析预测法) 无需从头开始,您可以通过实现Keras.wrappers.Scikit_learnpackage中的两个包装器之一

我发现的唯一一个与Keras函数API一起工作的超参数优化库是Talos


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

您可以使用Sklearn Grid Search和交叉验证执行Keras超参数调整

要使用顺序Keras模型(仅单输入)执行网格搜索,必须使用将这些模型转换为sklearn兼容的估计量

sklearn估计器是一类具有拟合(X,y)、预测(X)和 评分方法。(和期权分析预测法)

无需从头开始,您可以通过实现Keras.wrappers.Scikit_learnpackage中的两个包装器之一,将顺序Keras模型用作Scikit学习工作流的一部分:

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.
注意,与scikit learn中的所有其他估计器一样,build_fn应该 为其参数提供默认值,以便您可以创建 无需将任何值传递给sk_参数的估计器

示例:使用Keras的简单二元分类 实现Keras模型创建者功能 我们希望微调这些超参数:优化器、辍学率、内核初始化方法和密集层大小。

这些参数必须在带有默认参数的create_model()函数的签名中定义。如果需要,您可以添加其他超参数,如学习率

二进制交叉熵非常适合于两类分类问题

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
创建类似学习的估计器 这是一个分类问题,所以我们使用KerasClassifier包装器

kears_estimator = KerasClassifier(build_fn=create_model, verbose=1)
定义超参数空间 我们在这里定义了我们的超参数空间,包括KERA拟合超参数:时代和批大小:

# 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交叉验证执行网格搜索
sklearn grid search不适用于keras函数API,因此答案并没有真正解决OP的问题。
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))