Jupyter (iPython) ноутбук заслуженно известен как хороший инструмент для прототипирования кода и интерактивного использования всех видов машинного обучения. Но когда я его использую, я неизбежно сталкиваюсь с следующим:
- ноутбук быстро становится слишком сложным и беспорядочным, чтобы его поддерживали и улучшали как записную книжку, и я должен сделать из него скрипты python;
- когда дело доходит до производственного кода (например, тот, который нужно повторно запускать каждый день), ноутбук снова не самый лучший формат.
Предположим, что я разработал конвейер для машинного обучения в jupyter, который включает в себя сбор исходных данных из разных источников, чистку данных, разработку функций и обучающих моделей. Теперь, какая лучшая логика для создания скриптов с помощью эффективного и понятного кода? До сих пор я использовал несколько способов:
-
Просто конвертируйте .ipynb в .py и, только с небольшими изменениями, скопируйте весь конвейер из ноутбука в один python script.
- '+': быстрый
- '-': грязный, негибкий, не удобно поддерживать
-
Сделайте одиночный script со многими функциями (приблизительно, 1 функция для каждой одной или двух ячеек), пытаясь включить этапы конвейера с отдельными функциями и назовите их соответственно. Затем укажите все параметры и глобальные константы через
argparse
.- '+': более гибкое использование; более читаемый код (если вы правильно преобразовали логику конвейера в функции)
- '-': часто трубопровод НЕ расщепляется на логически завершенные части, которые могут стать функциями без каких-либо причуд в коде. Все эти функции обычно необходимо вызывать только один раз в script, а не много раз повторяться внутри циклов, карт и т.д. Кроме того, каждая функция обычно выводит выходные данные всех функций, называемых ранее, поэтому приходится передавать много аргументов каждой функции.
-
То же самое, что и точка (2), но теперь оберните все функции внутри класса. Теперь все глобальные константы, а также выходы каждого метода могут быть сохранены как атрибуты класса.
- '+': вам не нужно передавать много аргументов каждому методу - все предыдущие выходы, уже сохраненные как атрибуты
- '-': общая логика задачи все еще не захвачена - это конвейер данных и машинного обучения, а не только класс. Единственная цель для класса должна быть создана, вызывать все методы последовательно один за другим, а затем удаляться. Кроме того, классы довольно долго реализуются.
-
Преобразование ноутбука в модуль python с несколькими скриптами. Я не пробовал это, но я подозреваю, что это самый длинный способ справиться с этой проблемой.
Я полагаю, эта общая настройка очень распространена среди ученых-ученых, но на удивление я не могу найти полезные советы.
Люди, пожалуйста, поделитесь своими идеями и опытом. Вы когда-нибудь сталкивались с этой проблемой? Как вы справились с этим?