Я выбрал модель и хочу предоставить только API prediction
, написанные на Flask
. Однако, когда я пишу файл докеров для создания изображения без sklearn
, я получаю сообщение об ошибке ModuleNotFoundError: No module named 'sklearn.xxxx'
, где xxx
относится к классам алгоритмов машинного обучения sklearn, в момент, когда я загружаю модель. используя рассол, например classifier = pickle.load(f)
.
Когда я переписываю файл докеров, чтобы создать изображение, в котором тоже есть sklearn
, я не получаю сообщение об ошибке, хотя в API я никогда не импортирую sklearn
.
Моя концепция травления очень проста: она сериализует класс классификатора со всеми его данными. Поэтому, когда мы распаковываем его, поскольку класс классификатора уже имеет атрибут predict
, мы можем просто вызвать его. Зачем мне нужно иметь sklearn
в среде?
2 ответа
Вы неправильно понимаете, как работает рассол.
Он не ничего разделяет, кроме состояния экземпляра (__dict__
по умолчанию или пользовательской реализации). При распаковке он просто пытается создать экземпляр соответствующего класса (здесь идет ваша ошибка импорта) и установить состояние маринования.
Для этого есть причина: вы не знаете заранее, какие методы будут использоваться после load
, поэтому вы не можете обработать реализацию. В дополнение к этому, во время рассола вы не можете создать некоторый AST, чтобы увидеть, какие методы / модули потребуются после десериализации, и основная причина этого - динамический характер python - ваша реализация может фактически варьироваться в зависимости от ввода.
В конце концов, даже если предположить, что теоретически у нас будет интеллектуальная автономная сериализация pickle, это будет фактическая модель + sklearn в одном файле, без надлежащего способа управления этим.
Рассол - это просто представление данных внутри модели. Вам все еще нужен код для его использования, поэтому вам нужно иметь sklearn
внутри контейнера.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.