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