如何使ScikitLearn GridSearchCV知道自定义Keras丢失函数?

2024-04-20 13:58:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用gridsearchcv为我的Keras模型寻找超参数,它包含一个自定义的丢失函数。在

当我手动运行这个(在gridsearch之外)时,它是有效的。但是,如果我在其上运行gridsearchcv并并行执行此操作,那么在设置参数n_jobs=-1时,Koby后端执行的序列化似乎有一些问题。在

以下是我如何设置自定义损失函数:

from keras import backend as K

def my_loss(y_true, y_pred):
    # perform some calculations using K
    # ...
    return 1 - K.mean(score)

这是我的模型函数,它从网格搜索中获取一些参数:

^{pr2}$

最后,我是如何组合起来的:

from sklearn.model_selection import GridSearchCV, StratifiedKFold
from keras.wrappers.scikit_learn import KerasClassifier

skfs = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)
parameters = {'hidden_layers': [...],
              'activation':[...],
              'last_activation': [...],
              'optimizer':[...],
              'drop_rate':[...],
              'initializer':[...],
              'units':[...],
              'input_dim': [...]
             }
model = KerasClassifier(build_fn=create_model, epochs=100, batch_size=256, verbose=0)
classifier = GridSearchCV(estimator=model, param_grid=parameters, cv=skfs, scoring=score, verbose=1, n_jobs=-1, return_train_score=True)
results = classifier.fit(X, y, callbacks=early_stopping)

当我执行上面的代码时,我得到一个异常,说my_loss函数未知。{cd3>如果要改变它:

classifier = GridSearchCV(estimator=model, param_grid=parameters, cv=skfs, scoring=score, verbose=1, n_jobs=1, return_train_score=True)

它起作用了。我认为我必须以某种方式宣传我自己的职能。我该怎么做?在


Tags: 函数fromimporttrueverbose参数modelreturn