Я построил свой собственный склеарноподобный оценщик, используя обучение pytorch внутри графического процессора (cuda), и он отлично работает с RandomizedSearchCV, когда n_jobs == 1. Когда n_jobs> 1, я получаю следующую ошибку:
PicklingError: не удается pickle
main .LSTM'>: поиск атрибута LSTM на main не удался
Это фрагмент кода, который дает мне ошибку:
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 приводит к точно такой же ошибке. , ничего не меняет.
Я нашел ближайшее решение здесь, но до сих пор не знаю, как использовать RandomizedSearchCV в Neuraxle . Это совершенно новый проект, поэтому я не смог найти ответа ни в их документации, ни в примерах сообщества. Если кто-нибудь может привести мне пример или хорошее указание, это спасет мне жизнь. Спасибо
Ps: Также помогает любой способ запустить RandomizedSearchCV с моей моделью pytorch на графическом процессоре без Neuraxle, мне просто нужно n_jobs> 1.
Ps2: В моей модели есть метод fit (), который создает и перемещает тензоры в графический процессор и уже протестирован.
1 ответ
Здесь необходимо соблюдать несколько критериев, чтобы ваш код работал:
- Вам нужно использовать RandomSearch Neuraxle вместо случайного поиска sklearn, чтобы это сработало. По возможности используйте базовые классы Neuraxle.
- Убедитесь, что вы используете Neuraxle BaseStep для своей модели pytorch вместо базового класса sklearn.
- Кроме того, вы должны создавать свой код PyTorch только в методе setup () или более поздней версии. Вы не можете создать модель PyTorch в
__init__
BaseStep, который содержит код pytorch. Вы захотите прочитать эту страницу. - Вероятно, вам придется создать { {X0}} для вашего BaseStep, который содержит код PyTorch, если вы хотите сериализовать, а затем снова загрузить обученный конвейер. Вы можете увидеть, как мы создали нашу TensorFlow Saver для наших здесь два класса шага и заставки TensorFlow, за исключением того, что ваша модель PyTorch находится в переменной self.model вашего шага.
Я был бы рад увидеть вашу реализацию вашего базового шага PyTorch и вашей заставки PyTorch!
Затем вы также можете использовать класс AutoML (см. пример AutoML здесь), чтобы сохранить эксперименты в репозитории гиперпараметров, как показано в примере.
1Guillaume Chevalier 29 Сен 2020 в 23:34
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.