gpt4 book ai didi

python - 为什么对 `fit` 的第二个 `GridSearchCV` 调用会无休止地工作?

转载 作者:行者123 更新时间:2023-11-30 08:58:18 26 4
gpt4 key购买 nike

我正在使用 sklearn 中的 GridSearchCV 调整 Keras 模型中的超参数,如 this tutorial 所示。

model = KerasClassifier(build_fn=create_model, verbose=0)
batch_size = [10, 20, 40, 60, 80, 100]
epochs = [10, 50, 100]
param_grid = dict(batch_size=batch_size, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)

我调用 fit 方法来找到最佳的超参数

grid_result = grid.fit(X, Y)

但是,假设我想更改 batch_sizes 并再次调用 fit(无需在 Jupyter 中重新启动内核)。

batch_size = [15, 20, 25, 30, 35, 40]
param_grid = dict(batch_size=batch_size, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)

当我打电话fit

grid_result = grid.fit(X, Y)

它会无限地工作并且不会终止。为了适应这个改变的参数,我必须重新启动内核,然后重新加载数据、模块等。

问题。如何在不重新启动内核的情况下在 GridSearchCV 上第二次调用 fit

<小时/>

详细信息。我使用this data 。详细片段:

import numpy as np
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier

def create_model():
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model

dataset = np.loadtxt("data/pima-indians-diabetes.data.csv", delimiter=",")
X = dataset[:,0:8]
y = dataset[:,8]

model = KerasClassifier(build_fn=create_model, verbose=0)

batch_size = [10, 20, 40, 60, 80, 100]
epochs = [10, 50]
param_grid = dict(batch_size = batch_size, epochs = epochs)

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)

然后我调用 fit 并且它工作正常

grid_result = grid.fit(X, y)
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))

输出:最佳:0.690104 使用 {'batch_size': 10, 'epochs': 50}

然后我运行以下命令进行一些更改:

batch_size = [5, 10, 15, 20]
param_grid = dict(batch_size = batch_size, epochs = epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)

最后我第二次调用了 fit,它永远不会停止

grid_result = grid.fit(X, y)

最佳答案

我可以在 MacBook Pro 上重现该错误。我还使用了 pima-indians-diabetes.data.csv 数据集。

这里的问题与 tensorflow session 有关。如果在 GridSearchCV.fit() 之前在父进程中创建 session ,它肯定会挂起。

一种可能的解决方案是将所有 session 创建代码限制为 KerasClassifer 类和模型创建函数。

此外,您可能希望在模型创建函数或 KerasClassifier 的子类中限制 TF 的内存使用。

<小时/>

快速解决方案:

n_jobs = 1

但是需要很长时间才能完成。

<小时/>

引用文献:

Session hang issue with python multiprocessing

Keras + Tensorflow and Multiprocessing in Python

Limit the resource usage for tensorflow backend

GridSearchCV Hangs On Second Run

scikit-lean GridSearchCV n_jobs != 1 freezing

关于python - 为什么对 `fit` 的第二个 `GridSearchCV` 调用会无休止地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583772/

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