【发布时间】:2021-01-13 00:21:41
【问题描述】:
我使用 GPU (cuda) 内的 pytorch 训练构建了自己的类似 sklearn 的估计器,当 n_jobs==1 时,它与 RandomizedSearchCV 一起工作得很好。当 n_jobs > 1 时,出现以下错误:
PicklingError: Can't pickle
main.LSTM'>: main 上的属性查找 LSTM 失败
这是给我错误的代码:
model = my_model(input_size=1, hidden_layer_size=80, n_lstm_units=3, bidirectional=False,
output_size=1, training_batch_size=60, epochs=7500, device=device)
model.to(device)
hidden_layer_size = random.uniform(40, 200, 20).astype("int")
n_lstm_units = arange(1, 4)
parametros = {'hidden_layer_size': hidden_layer_size, 'n_lstm_units': n_lstm_units}
splitter = ShuffleSplit()
regressor = model
cv_search = \
RandomizedSearchCV(estimator=regressor, cv=splitter,
search_spaces=parametros,
refit=True,
n_iter=4,
verbose=1,
n_jobs=2,
scoring=make_scorer(mean_squared_error,
greater_is_better=False,
needs_proba=False))
cv_search = MetaSKLearnWrapper(cv_search)
cv_search.fit(X, y)
使用 Neuraxle wrapper 会导致完全相同的错误,没有任何改变。
我找到了最接近的解决方案 here,但仍然不知道如何在 Neuraxle 中使用 RandomizedSearchCV。这是一个全新的项目,所以我在他们的文档或社区示例中找不到答案。如果有人能给我一个例子或一个很好的指示,它将挽救我的生命。谢谢
Ps:任何在没有 Neuraxle 的情况下在 gpu 上使用我的 pytorch 模型运行 RandomizedSearchCV 的方法也有帮助,我只需要 n_jobs>1。
Ps2:我的模型有一个 fit() 方法,可以创建张量并将其移动到 gpu 并且已经过测试。
【问题讨论】:
标签: python scikit-learn pytorch neuraxle