Лучший инструмент для воспроизведения - это вести журнал ваших действий, примерно так:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Это может быть записано на бумаге, но, если ваши эксперименты вписываются в вычислительную среду, вы можете использовать вычислительные инструменты, чтобы частично или полностью автоматизировать этот процесс регистрации (в частности, помогая вам отслеживать наборы входных данных, которые могут быть огромными, и выходные данные цифры).
Отличным инструментом воспроизводимости для Python с низкой кривой обучения, конечно же, является IPython / Jupyter Notebook (не забудьте про магию % logon и% logstart ). Совет: чтобы убедиться, что ваш ноутбук воспроизводим, перезапустите ядро и попробуйте запустить все ячейки сверху вниз (кнопка Run All Cells): если это работает, сохраните все в архивном файле («зависание»), в противном случае, особенно если вам нужно запускать ячейки нелинейным, непоследовательным и неочевидным образом, чтобы избежать ошибок, вам нужно немного переделать.
Еще один замечательный инструмент, появившийся совсем недавно (2015), - это recy , который очень похож на суматру (см. Ниже), но создан специально для Python. Я не знаю, работает ли он с ноутбуками Jupyter, но я знаю, что автор часто использует их, поэтому я предполагаю, что, если он не поддерживается в настоящее время, он будет в будущем.
Git также великолепен и не привязан к Python. Это поможет вам не только вести историю всех ваших экспериментов, кода, наборов данных, рисунков и т. Д., Но также предоставит вам инструменты для поддержки ( git pickaxe ), совместной работы ( обвинение ) и отладки ( git - bisect ) с использованием научного метод отладки (называется дельта-отладка ). Вот история вымышленного исследователя, пытающегося создать свою собственную систему регистрации экспериментов, пока она не станет факсимильной версией Git.
Еще одним общим инструментом, работающим с любым языком (с Python API на pypi ), является Sumatra , который специально разработан для того, чтобы помочь вам проводить реплицируемые исследования ( реплицируемая цель состоит в том, чтобы давать одинаковые результаты при одинаковом коде и программном обеспечении, тогда как воспроизводимость предназначена для создания те же результаты, что и для любой среды, которая намного сложнее и требует больше времени и не может быть автоматизирована).
Вот как работает Суматра: для каждого эксперимента, который вы проводите через Суматру, это программное обеспечение будет действовать как «сохранение состояния игры», часто встречающееся в видеоиграх. Точнее, это сэкономит:
- все параметры, которые вы предоставили;
- точное состояние исходного кода всего экспериментального приложения и файлов конфигурации;
- выходные данные / графики / результаты, а также любой файл, созданный вашим экспериментальным приложением.
Затем он создаст базу данных с отметкой времени и другими метаданными для каждого из ваших экспериментов, которые вы позже сможете сканировать с помощью webGUI. Так как Суматра сохранила полное состояние вашего приложения для конкретного эксперимента в один конкретный момент времени, вы можете восстановить код, который дал конкретный результат, в любой момент, когда вы захотите, таким образом, у вас будет тиражируемое исследование с низкой стоимостью (за исключением хранения, если вы работаете с огромными наборами данных, но вы можете настроить исключения, если вы не хотите сохранять все каждый раз).
Еще одним замечательным инструментом является GNIT Zeitgeist (ранее написанный на Python, но теперь перенесенный на Vala), система регистрации действий, которая полностью записывает все, что вы делаете, и может использовать машинное обучение для подведения итогов за период времени, когда вы хотите, чтобы отношения между элементами основывались о сходстве и моделях использования, например, отвечая на вопросы типа «Что было наиболее актуально для меня, когда я работал над проектом X, в течение месяца в прошлом году?» , Интересно, что Zim Desktop Wiki , приложение для создания заметок, похожее на Evernote, имеет плагин для работы с Zeitgeist.
В конце концов, вы можете использовать либо Git, либо Sumatra, либо любое другое программное обеспечение, которое вам нужно, они предоставят вам примерно ту же мощность репликации, но Sumatra специально предназначена для научных исследований, поэтому предоставляет несколько необычных инструментов, таких как веб-интерфейс для сканирования. ваши результаты, в то время как Git более приспособлен для сопровождения кода (но у него есть инструменты отладки, такие как git-bisect, так что если ваши эксперименты включают в себя коды, это может быть и лучше). Или, конечно, вы можете использовать оба!
/ РЕДАКТИРОВАТЬ: dsign коснулся очень важного момента: тиражируемость вашей установки так же важна, как и тиражируемость вашего приложения. Другими словами, вы должны по крайней мере предоставить полный список используемых вами библиотек и компиляторов , а также их точные версии и сведения о вашей платформе .
Лично в научных вычислениях на Python я обнаружил, что упаковка приложения вместе с библиотеками слишком болезненна, поэтому сейчас я просто использую универсальный научный пакет Python, такой как Anaconda (с великолепным менеджером пакетов conda ), и просто посоветуйте пользователям использовать один и тот же пакет. Другое решение может состоять в том, чтобы предоставить скрипт для автоматической генерации virtualenv или упаковать все, используя коммерческое приложение Docker, упомянутое dsign или Vagrant с открытым исходным кодом (например, с pylearn2-in-a-box, который использует Vagrant для создания легко распространяемого пакета). пакет виртуальной среды).
Наконец, чтобы действительно обеспечить наличие полностью рабочей среды каждый раз, когда вам нужно, вы можете создать виртуальную машину (см. VirtualBox) и даже сохранить состояние машины (снимок), готовый к запуску эксперимент. Затем вы можете просто поделиться этой виртуальной машиной со всем включенным, чтобы каждый мог повторить ваш эксперимент с вашими точными настройками. Это, вероятно, лучший способ воспроизвести программный эксперимент. Контейнеры могут быть более легкой альтернативой, но они не включают всю среду, поэтому точность репликации будет менее надежной.
/ РЕДАКТИРОВАТЬ 2: Вот отличное видео, суммирующее (для отладки, но это также может быть применено к исследованиям), что является фундаментальным для воспроизводимых исследований: регистрация ваших экспериментов и каждого другого шага научного метода, своего рода «явное экспериментирование» .