أهلاً! نحن نبحث حاليًا عن رائحة الكود في مشاريع التعلم الآلي في سياق الصناعة ونبحث عن ردود الفعل لـ
dslinter! ستكون مساعدة هائلة إذا تمكنت من تشغيلdslinterعلى مشروع تعلم الآلة في إعداد الصناعة وإرسال ملف TXT الذي تم إنشاؤه إلى [email protected]. يمكن العثور على الخطوات والأوامر هنا ويجب أن يستغرق الأمر أكثر من 10 دقائق. لا تتردد في إرسال بريد إلكتروني إلي إذا كنت ترغب في الذهاب إلى العملية معًا. العملية مجهولة وسنزيل أي معلومات حساسة قبل نشر النتائج. شكرا جزيلا!
dslinter هو مكون إضافي بيلنت لتصميم رمز علم البيانات ورمز التعلم الآلي. ويهدف إلى مساعدة المطورين على ضمان جودة رمز التعليم الآلي ويدعم مكتبات بيثون التالية: 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 | مدقق التكرار غير الضروري (PANDAS) : يتم تفضيل الحلول المتقدمة على التكرار لإطارات البيانات. إذا تم استخدام التكرارات أثناء وجود واجهات برمجة التطبيقات المتجهة ، يتم استخدام القاعدة.
W5501 | DataFrame-Eneration-Modification-Pandas | مدقق التكرار غير الضروري (Pandas) : لا ينبغي تعديل إطار بيانات حيث يتم تكراره. إذا تم تعديل نظام البيانات أثناء التكرار ، يتم انتهاك القاعدة.
R5502 | لا لزوم لها-تنسور تنسورفلو | مدقق التكرار غير الضروري (TensorFlow) : إذا كان هناك أي عملية تخصيص زيادة في الحلقة ، يتم انتهاك القاعدة. يمكن استبدال تعيين زيادة في الحلقة بمحلول متجه في واجهات برمجة التطبيقات TensorFlow.
E5501 | نان numpy | مدقق المساواة في NAN (Numpy) : لا يمكن مقارنة القيم بـ np.nan ، مثل np.nan != np.nan .
W5502 | سلسلة الانضمام بانداس | مدقق فهرسة السلسلة (PANDAS) : تعتبر فهرسة السلسلة ممارسة سيئة في رمز PANDAS ويجب تجنبها. إذا تم استخدام فهرسة السلسلة على DataFrame Pandas ، يتم انتهاك القاعدة.
R5503 | datatype-pandas | مجاهد نوع البيانات (PANDAS) : يجب تعيين نوع البيانات عند استيراد نظام بيانات من البيانات لضمان استيراد تنسيقات البيانات كما هو متوقع. إذا لم يتم تعيين نوع البيانات عند الاستيراد ، يتم انتهاك القاعدة.
R5504 | عمود الاختيار باندا | مدقق تحديد العمود (Pandas) : يجب تحديد العمود بعد استيراد DataFrame لتحسين وضع ما هو متوقع في المصب.
R5505 | دمج المعلمة باندا | Merge Parameter Checker (Pandas) : يجب تعيين المعلمات "How" و ON "و" التحقق "لعمليات الدمج لضمان الاستخدام الصحيح للدمج.
W5503 | في Pandas | المدقق في مكان (PANDAS) : تقوم العمليات على إطارات البيانات بإرجاع إطارات البيانات الجديدة ، ويجب تعيينها إلى متغير. وإلا فإن النتيجة ستضيع ، وينتهك القاعدة. يتم استبعاد عمليات من القائمة البيضاء ومع مجموعة المعلمات in_place .
W5504 | DataFrame-Conversion-Pandas | مجاهد تحويل DataFrame (Pandas) : لتحويل DataFrame في رمز Pandas ، استخدم .to_numpy () بدلاً من القيم. إذا تم استخدام القيم. في رمز Pandas ، يتم انتهاك القاعدة.
W5505 | scaler-missing-scikitlearn | المدقق المفقود (Scikitlearn) : تحقق مما إذا كان يتم استخدام Scaler قبل كل عملية حساسة للتوسع في رموز Scikit-Learn. تتضمن العمليات الحساسة للتوسع تحليل المكونات الرئيسية (PCA) ، وآلة ناقلات الدعم (SVM) ، ونسب التدرج العشوائي (SGD) ، ومصنف Perceptron متعدد الطبقات وتنظيم L1 و L2.
R5506 | Hyperparameters-Scikitlearn | المدقق Hyperparameter (Scikitlearn) : لخوارزميات التعلم Scikit-Learn ، ينبغي تعيين بعض المقاييس المفرطة الهامة.
R5507 | Hyperparameter-Tensorflow | المدقق Hyperparameter (TensorFlow) : بالنسبة لخوارزمية تعلم الشبكة العصبية ، ينبغي تعيين بعض المقاييس الفائقة المؤمن ، مثل معدل التعلم وحجم الدُفعة والزخم وتسوس الوزن.
R5508 | Hyperparameter-Pytorch | المدقق Hyperparameter (Pytorch) : بالنسبة لخوارزمية تعلم الشبكة العصبية ، ينبغي تعيين بعض المقاييس الفائقة المؤمن ، مثل معدل التعلم وحجم الدُفعة والزخم والوزن.
W5506 | الذاكرة لإصدار tensorflow | مدقق إصدار الذاكرة (TensorFlow) : إذا تم إنشاء شبكة عصبية في الحلقة ، ولم يتم استخدام أي عملية واضحة للذاكرة ، يتم انتهاك القاعدة.
W5507 | حتمية بايتورش | مدقق استخدام الخوارزمية الحتمية (Pytorch) : إذا لم يتم استخدام خوارزمية use_deterministic في برنامج Pytorch ، يتم انتهاك القاعدة.
W5508 | العشوائية-السيطرة numpy | مدقق التحكم العشوائي (Numpy) : يجب استخدام np.seed () للحفاظ على استنساخ في برنامج التعلم الآلي.
W5509 | العشوائية-السيطرة scikitlearn | مدقق التحكم العشوائي (Scikitlearn) : بالنسبة للنتائج القابلة للتكرار عبر عمليات الإعدام ، قم بإزالة أي استخدام لـ Random_State = لا شيء في مقدرات Scikit-Learn.
W5510 | العشوائية-السيطرة tensorflow | مدقق التحكم العشوائي (TensorFlow) : يجب استخدام tf.random.set_seed () للحفاظ على استنساخ في برنامج Tensorflow.
W5511 | العشوائية-السيطرة على بايتورش | مدقق التحكم العشوائي (Pytorch) : يجب استخدام torch.manual_seed () للحفاظ على استنساخ في برنامج Tensorflow.
W5512 | عشوائي-السيطرة على dataloader-pytorch | مدقق التحكم العشوائي (Pytorch-dataloader) : يجب تعيين Worker_init_fn () والمولد في dataloader للحفاظ على استنساخ. إذا لم يتم تعيينهم ، يتم انتهاك القاعدة.
W5513 | مفقود القناع tensorflow | Mask Missing Checker (TensorFlow) : إذا تم استخدام وظيفة السجل في الكود ، تحقق مما إذا كانت قيمة الوسيطة صالحة.
W5514 | مفقود القنفة بيتورش | Mask Missing Checker (Pytorch) : إذا تم استخدام وظيفة السجل في الكود ، تحقق مما إذا كانت قيمة الوسيطة صالحة.
W5515 | تنسور-أبرز Tensorflow | مدقق صفيف الموتر (TensorFlow) : استخدم tf.tensorarray () لزراعة الصفيف في الحلقة.
W5516 | الأمامي بايتورش | Net Forward Checker (Pytorch) : يوصى باستخدام Self.net () بدلاً من Self.net.forward () في رمز Pytorch. إذا تم استخدام Self.net.forward () في الكود ، يتم انتهاك القاعدة.
W5517 | التدرج-clear-pytorch | التدرج Clear Checker (Pytorch) : يجب استخدام LOSS_FN.Backward () و Optimizer.step () مع Optimizer.zero_grad (). إذا كان .zero_grad() مفقودًا في الكود ، يتم انتهاك القاعدة.
W5518 | خط أنابيب لا يستخدم scikitlearn | مدقق خطوط الأنابيب (Scikitlearn) : يجب استخدام جميع مقدري Scikit-Learn داخل خطوط الأنابيب ، لمنع تسرب البيانات بين بيانات التدريب واختبار.
W5519 | تعتمد على العتبة scikitlearn | يتم استخدام مدقق العتبة التابع (TensorFlow) : إذا تم استخدام التقييم المعتمد على العتبة (على سبيل المثال ، F-Score) في الكود ، تحقق مما إذا كان التقييم العتبة (EG ، AUC) يستخدم أيضًا في الكود.
W5520 | اعتماد عتبة tensorflow | يتم استخدام مدقق العتبة التابع (Pytorch) : إذا تم استخدام التقييم المعتمد على العتبة (على سبيل المثال ، F-Score) في الكود ، تحقق مما إذا كان التقييم العتبة (EG ، AUC) يستخدم أيضًا في الكود.
W5521 | التبعية-العتبة بايتورش | يتم استخدام مدقق العتبة التابع (Scikitlearn) : إذا تم استخدام التقييم المعتمد على العتبة (على سبيل المثال ، F-Score) في الكود ، تحقق مما إذا كان التقييم المعتمد على العتبة (EG ، AUC) يستخدم أيضًا في الكود.
تم تطوير DSLINTER بواسطة Mark Haakman و Haiyin Zhang خلال أطروحاتنا الرئيسية في مجموعة أبحاث هندسة البرمجيات (SERG) في Tu Delft و ING's AI for Fintech Research Lab ، التي يشرف عليها لويس كروز وأري فان ديورسن.
المشرف: Haiyin Zhang [[email protected]].