Ошибка загрузки конвейера neuraxle с контекстом выполнения
Когда я сохраняю конвейер, с которым связан ExecutionContext, и пытаюсь загрузить его снова, я получаю показанную ниже ошибку.
from neuraxle.base import ExecutionContext, Identity
from neuraxle.pipeline import Pipeline
PIPELINE_NAME = 'saved_pipeline_name'
cache_folder = 'cache_folder'
pipeline = Pipeline([
Identity()
]).with_context(ExecutionContext(cache_folder))
pipeline.set_name(PIPELINE_NAME).save(ExecutionContext(cache_folder), full_dump=True)
loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)
Сообщение об ошибке:
Traceback (most recent call last):
File "save_example.py", line 12, in <module>
loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 555, in load
).load(context_for_loading, True)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 3621, in load
return loaded_self.load(context, full_dump)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 1708, in load
return self._load_step(context, savers)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 1717, in _load_step
loaded_self = saver.load_step(loaded_self, context)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 3644, in load_step
step.apply('_assert_has_services', context=context)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2316, in apply
results: RecursiveDict = self._apply_childrens(results=results, method=method, ra=ra)
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2327, in _apply_childrens
for children in self.get_children():
File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2530, in get_children
return [self.wrapped]
AttributeError: 'StepWithContext' object has no attribute 'wrapped'
Без
with_context(ExecutionContext(cache_folder))
загрузка работает нормально. Это ожидаемое поведение или это ошибка? Что было бы лучше всего для сохранения конвейеров при работе с контекстами выполнения?
1 ответ
Произошел ошибочный вызов функции в заставке StepWithContext. На следующий день или около того в главный репозиторий Neuraxle будет добавлено исправление. Если вы можете подождать до этого момента, ваш код должен выполняться без проблем.
Если нет, я бы посоветовал вам обойти StepWithContext, вызвав сохранение непосредственно на обернутом шаге StepWithContext (то есть в вашем экземпляре конвейера):
pipeline.wrapped.set_name(PIPELINE_NAME).save(ExecutionContext(cache_folder), full_dump=True)
loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)
Затем вам нужно будет повторно обернуть экземпляр loaded_pipeline с помощью StepWithContext, используя вызов .with_context().
Когда исправление будет доступно, имейте в виду, что экземпляры ExecutionContext вообще не сохраняются и что атрибут контекста StepWithContext заменяется тем контекстом, который используется для загрузки.
Не стесняйтесь задавать мне любые другие вопросы! Буду рад на них ответить.
Привет, Винсент