我试图用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)
它起作用了。我认为我必须以某种方式宣传我自己的职能。我该怎么做?在
目前没有回答
相关问题 更多 >
编程相关推荐