Привет! В настоящее время мы исследуем запахи кода в проектах машинного обучения в отраслевом контексте и ищем обратную связь для
dslinter! Это было бы огромной помощью, если бы вы могли запуститьdslinterв своем проекте машинного обучения в отраслевом настройке и отправить сгенерированный файл TXT на [email protected]. Шаги и команды можно найти здесь, и это должно занять не более 10 минут. Не стесняйтесь присылать мне электронное письмо, если вы хотите пройти через процесс вместе. Процесс является анонимным, и мы удалим любую конфиденциальную информацию до публикации результатов. Большое спасибо!
dslinter - это плагин Pylint для снятия науки о данных и кода машинного обучения. Он направлен на то, чтобы помочь разработчикам обеспечить качество кода машинного обучения и поддерживает следующие библиотеки Python: Tensorflow, Pytorch, Scikit-Learn, Pandas, Numpy и Scipy.
dslinter реализует правила обнаружения запахов, выявленные нашей предыдущей работой. Запахи собираются из бумаг, серой литературы, коммитов Github и переполнения стека. Запахи также разработаны на веб -сайте :)
Пример проекта в демонстрационном видео можно найти здесь.
Чтобы установить из индекса пакета Python:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
Или поместите файл конфигурации .pylintrc , который содержит выше настройки в папке, где вы запускаете свою команду, и запускаете:
pylint <path_to_sources>
[Для пользователей Linux/Mac OS]:
pylint
--load-plugins=dslinter
--disable=all
--enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,
nan-numpy,chain-indexing-pandas,
merge-parameter-pandas,
dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,
hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,
deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,
randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,
missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,
forward-pytorch,pipeline-not-used-scikitlearn,
dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch
--output-format=text:report.txt,colorized
--reports=y
<path_to_sources>
[Для пользователей Windows]:
pylint --load-plugins=dslinter --disable=all --enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,nan-numpy,chain-indexing-pandas,merge-parameter-pandas,dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,forward-pytorch,pipeline-not-used-scikitlearn,dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch --output-format=text:report.txt,colorized --reports=y <path_to_sources>
Или поместите файл конфигурации .pylintrc , который содержит выше настройки в папке, где вы запускаете свою команду, и запускаете:
pylint <path_to_sources>
Взносы приветствуются! Если вы хотите внести свой вклад, см. Следующие шаги:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter использует poetry для управления зависимостями, поэтому вам нужно сначала установить poetry , а затем установить зависимости. pip install poetry
poetry install
dslinter из источника для целей разработки, установите его на: poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 - C5506 | Импорт | Импорт Проверка : Проверьте, импортируются ли модули науки о данных с использованием правильных соглашений об именах.
R5501 | ненужные-Пандас | Ненужная итерационная проверка (Pandas) : векторизованные решения предпочтительны по сравнению с итераторами для DataFrames. Если итерации используются во время использования векторизованных API, правило нарушается.
W5501 | DataFrame-Modiation-Pandas | Ненужная итерационная проверка (Pandas) : DataFrame, где итерация не должна быть изменена. Если DataFrame изменен во время итерации, правило нарушается.
R5502 | ненужные-Tensorflow | Ненужная итерационная проверка (Tensorflow) : если в цикле есть какая -либо операция по назначению дополнения, правило нарушается. Назначение увеличения в цикле может быть заменено векторизованным раствором в API -интерфейсах Tensorflow.
E5501 | Нан-Нампи | Проверка равенства NAN (Numpy) : значения нельзя сравнить с NP.NAN, как np.nan != np.nan .
W5502 | цепь-индексация-пэндас | Проверка индексации цепи (Pandas) : Индексация цепи считается плохой практикой в коде Пандас и следует избегать. Если индексация цепи используется на пандас -фрейму, правило нарушается.
R5503 | DataType-Pandas | Checker DataType (Pandas) : DataType должен быть установлен, когда DataFrame импортируется из данных, чтобы убедиться, что форматы данных импортируются, как и ожидалось. Если дата не установлен при импорте, правило нарушается.
R5504 | Колоночные сборы-пэндас | Проверка выбора столбцов (Pandas) : столбец должен быть выбран после того, как DataFrame импортируется для лучшего разработки того, чего ожидать в нижнем потоке.
R5505 | Merge-Parameter-Pandas | Проверка параметров Merge (Pandas) : параметры «Как», «On» и «validate» должны быть установлены для операций слияния, чтобы обеспечить правильное использование слияния.
W5503 | в Place-Pandas | Проверка на место (Pandas) : операции на DataFrames возвращают новые DataFrames, и они должны быть назначены переменной. В противном случае результат будет потерян, и правило нарушено. Операции из белого списка и с набором параметров in_place исключены.
W5504 | DataFrame-Conversion-Pandas | Проверка конверсии данных (pandas) : для преобразования данных DataFrame в коде Pandas используйте .to_numpy () вместо. Если.
W5505 | Scaler-Missing-Scikitlearn | Scaler отсутствует Checker (Scikitlearn) : проверьте, используется ли Scaler до каждой чувствительной к масштабированию операции в кодах Scikit-Learn. Операции, чувствительные к масштабированию, включают в себя анализ основных компонентов (PCA), вспомогательный векторный аппарат (SVM), стохастический градиент спуск (SGD), многослойный классификатор персептрона и регуляризацию L1 и L2.
R5506 | Hyperparameters-Scikitlearn | Проверка гиперпараметра (Scikitlearn) : для алгоритмов обучения Scikit-Learn следует установить некоторые важные гиперпараметры.
R5507 | Гиперпараметт-Tensorflow | Проверка гиперпараметра (TensorFlow) : для алгоритма обучения нейронной сети следует установить некоторые гиперпараметры Imporatnt, такие как скорость обучения, размер партии, импульс и распад веса.
R5508 | Гиперпараметт-Питорх | Проверка гиперпараметра (Pytorch) : для алгоритма обучения нейронной сети следует установить некоторые гиперпараметры Imporatnt, такие как скорость обучения, размер партии, импульс и распад веса.
W5506 | Отправление памяти-Tensorflow | Проверка выпуска памяти (TensorFlow) : если в цикле создается нейронная сеть, и не используется операция четкой памяти, правило нарушается.
W5507 | детерминированный-питор | Проверка детерминированного алгоритма (Pytorch) : если use_deterministic Algorithm не используется в программе Pytorch, правило нарушается.
W5508 | Случайно-контроль-Numpy | Проверка управления случайностью (Numpy) : np.seed () следует использовать для сохранения воспроизводимости в программе машинного обучения.
W5509 | Случайно-контроль-Scikitlearn | Проверка управления случайностью (scikitlearn) : для воспроизводимых результатов в результате выполнения удалите любое использование random_state = нет в оценщиках Scikit-Learn.
W5510 | Случайно-контроль-тензорфлоу | Проверка управления случайностью (TensorFlow) : tf.random.set_seed () должен использоваться для сохранения воспроизводимости в программе Tensorflow.
W5511 | Случайность-контроль-пирогат | Проверка управления случайностью (pytorch) : Torch.manual_seed () должен использоваться для сохранения воспроизводимости в программе Tensorflow.
W5512 | Случайность-контроль-даталозагрузчик-питор | Проверка управления случайностью (Pytorch-Dataloader) : работник_инт_fn () и генератор должны быть установлены в данных DataLoader для сохранения воспроизводимости. Если они не установлены, правило нарушается.
W5513 | Отсутствует-маска-тензорафлоу | Маска отсутствует проверка (tensorflow) : если в коде используется функция журнала, проверьте, является ли значение аргумента действительным.
W5514 | Отсутствует-маска-питор | Маска отсутствует проверка (Pytorch) : если в коде используется функция журнала, проверьте, является ли значение аргумента действительным.
W5515 | Тензор-арэй-Тензорфлоу | Проверка массива Tensor (TensorFlow) : используйте tf.tensorarray () для растущего массива в цикле.
W5516 | Вперед-питор | Net Partward Checker (Pytorch) : рекомендуется использовать Self.net (), а не self.net.forward () в коде Pytorch. Если Self.net.forward () используется в коде, правило нарушается.
W5517 | Градиент-CLEAR-PYTORCH | Gradient Clear Checker (pytorch) : Loss_fn.backward () и Optimizer.step () должны использоваться вместе с Optimizer.zero_Grad (). Если в коде отсутствует .zero_grad() , правило нарушается.
W5518 | трубопровод не используется Scikitlearn | Проверка трубопровода (Scikitlearn) : все оценки Scikit-Learn следует использовать внутри трубопроводов, чтобы предотвратить утечку данных между данными обучения и тестирования.
W5519 | Зависимый-Threshold-Scikitlearn | Зависимый пороговый контроль (Tensorflow) : если в коде используется пороговая оценка (например, F-оценка), проверьте, используются ли в коде показатели, индикативную пороговой оценкой (например, AUC).
W5520 | Зависимый-Threshold-Tensorflow | Зависимый пороговый контроль (Pytorch) : если в коде используется пороговая оценка (например, F-оценка), проверьте, используются ли в коде показатели оценки, индикативная пороговой кости (например, AUC).
W5521 | Зависимый-пологовый пирог | Зависимый пороговый контроль (scikitlearn) : если в коде используется пороговая оценка (например, F-оценка), проверьте, используются ли в коде метрики, индикативную пороговой оценкой (например, AUC).
DSlinter разрабатывается Марком Хаакманом и Хайином Чжаном во время наших главных тезисов в исследовательской группе по разработке программного обеспечения (SERG) в TU Delft и AI ING AI для Fintech Research Lab, под руководством Луиса Круза и Ари Ван Деурсен.
Содействие: Хайин Чжан [[email protected]].