Keras GridSearch scikit 学习冻结
Posted
技术标签:
【中文标题】Keras GridSearch scikit 学习冻结【英文标题】:Keras GridSearch scikit learn freezes 【发布时间】:2018-07-29 19:34:10 【问题描述】:我很难使用 scikit learn 在 Keras 中实现网格搜索。基于this tutorial,我编写了如下代码:
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
def create_model():
model = Sequential()
model.add(Dense(100, input_shape=(max_len, len(alphabet)), kernel_regularizer=regularizers.l2(0.001)))
model.add(Dropout(0.85))
model.add(LSTM(100, input_shape=(100,)))
model.add(Dropout(0.85))
model.add(Dense(num_output_classes, activation='softmax'))
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, decay=1e-6)
model.compile(loss='categorical_crossentropy',
optimizer=adam,
metrics=['accuracy'])
return model
seed = 7
np.random.seed(seed)
model = KerasClassifier(build_fn=create_model, epochs=10, verbose=0)
batch_size = [10,20]
param_grid = dict(batch_size=batch_size)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)
grid_result = grid.fit(train_data_reduced, train_labels_reduced)
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))
它没有给我任何错误信息,但它只是一直运行下去,没有打印出任何东西。我特意用很少的 epoch、很少的训练示例和很少的超参数来搜索它。如果没有网格搜索,一个 epoch 的运行速度非常快,所以我不认为我只需要给它更多的时间。它根本没有做任何事情。
谁能指出我遗漏了什么?
非常感谢!
【问题讨论】:
首先(总是)尝试n_jobs=1
,如果它工作正常并在合理的时间内返回。
对此有更新吗?我有类似的问题。 n_jobs=1 有效,但不能并行化。
n_jobs=1 最终会返回一些结果,但它花费的时间太长了,即使 GPU 上的数据量很少......
【参考方案1】:
我遇到了同样的问题。
从参数列表中删除 n_jobs=-1
可能会有所帮助!也尽量不要做热编码。
【讨论】:
以上是关于Keras GridSearch scikit 学习冻结的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GridSearch 保存具有最佳参数的 Keras 模型
使用 Scikit-Learn 在 RegressorChain 上进行 GridSearch?
使用 GridSearch 时使用 Scikit-learn 的模型帮助
GridSearch用于Scikit-learn中的多标签分类
Keras KerasClassifier gridsearch TypeError: can't pickle _thread.lock objects