สวัสดี! ขณะนี้เรากำลังค้นคว้ารหัสกลิ่นในโครงการการเรียนรู้ของเครื่องในบริบทของอุตสาหกรรมและมองหาข้อเสนอแนะสำหรับ
dslinter! มันจะเป็นความช่วยเหลืออย่างมากหากคุณสามารถเรียกใช้dslinterในโครงการการเรียนรู้ของเครื่องของคุณในการตั้งค่าอุตสาหกรรมและส่งไฟล์ txt ที่สร้างขึ้นไปที่ [email protected] ขั้นตอนและคำสั่งสามารถพบได้ที่นี่และควรใช้เวลาไม่เกิน 10 นาที อย่าลังเลที่จะส่งอีเมลถึงฉันหากคุณต้องการผ่านกระบวนการด้วยกัน กระบวนการนี้ไม่ระบุชื่อและเราจะลบข้อมูลที่ละเอียดอ่อนใด ๆ ก่อนที่ผลลัพธ์จะถูกเผยแพร่ ขอบคุณมาก!
dslinter เป็นปลั๊กอินไพลลินต์สำหรับวิทยาศาสตร์ผ้าสำลีและรหัสการเรียนรู้ของเครื่อง มันมีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนามั่นใจได้ถึงคุณภาพของรหัสการเรียนรู้ของเครื่องและสนับสนุนไลบรารี 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 | นำเข้า | Checker นำเข้า : ตรวจสอบว่ามีการนำเข้าโมดูลวิทยาศาสตร์ข้อมูลโดยใช้อนุสัญญาการตั้งชื่อที่ถูกต้องหรือไม่
R5501 | ไม่จำเป็นต้องใช้เครื่องประดับ ตัวตรวจสอบการวนซ้ำที่ไม่จำเป็น (Pandas) : โซลูชันเวกเตอร์เป็นที่ต้องการมากกว่าตัววนซ้ำสำหรับ dataframes หากมีการใช้การวนซ้ำในขณะที่สามารถใช้ apis vectorized ได้กฎจะถูกละเมิด
W5501 | DataFrame-Titeration-Modification-Pandas | Checker การทำซ้ำที่ไม่จำเป็น (Pandas) : DataFrame ที่ทำซ้ำไม่ควรแก้ไข หาก DataFrame ได้รับการแก้ไขในระหว่างการทำซ้ำกฎจะถูกละเมิด
R5502 | ไม่จำเป็นต้องใช้เครื่องประดับ ตัวตรวจสอบการวนซ้ำที่ไม่จำเป็น (TensorFlow) : หากมีการดำเนินการที่ได้รับมอบหมายใด ๆ ในลูปกฎจะถูกละเมิด การมอบหมายที่เพิ่มขึ้นในลูปสามารถถูกแทนที่ด้วยโซลูชันเวกเตอร์ใน API Tensorflow
E5501 | Nan-Numpy | ตัวตรวจสอบความเท่าเทียมกันของน่าน (numpy) : ไม่สามารถเปรียบเทียบค่ากับ np.nan เป็น np.nan != np.nan
W5502 | โซ่-ดัชนีแพนด้า | Checker การทำดัชนีโซ่ (Pandas) : การจัดทำดัชนีโซ่ถือเป็นวิธีปฏิบัติที่ไม่ดีในรหัสแพนด้าและควรหลีกเลี่ยง หากการจัดทำดัชนีโซ่ถูกใช้กับ dataframe pandas กฎจะถูกละเมิด
R5503 | DataType-Pandas | DataType Checker (PANDAS) : ควรตั้งค่าข้อมูลเมื่อมีการนำเข้า DataFrame จากข้อมูลเพื่อให้แน่ใจว่ารูปแบบข้อมูลจะถูกนำเข้าตามที่คาดไว้ หากไม่ได้ตั้งค่าข้อมูลเมื่อนำเข้ากฎจะถูกละเมิด
R5504 | คอลัมน์เลือกแพนด้า ตัวตรวจสอบการเลือกคอลัมน์ (แพนด้า) : ควรเลือกคอลัมน์หลังจากนำเข้า dataframe เพื่ออธิบายรายละเอียดที่ดีกว่าสิ่งที่คาดหวังในปลายน้ำ
R5505 | Merge-Parameter-Pandas | Merge Parameter Checker (Pandas) : พารามิเตอร์ 'How', 'on' และ 'ตรวจสอบ' ควรตั้งค่าสำหรับการดำเนินการผสานเพื่อให้แน่ใจว่าการใช้งานที่ถูกต้องของการรวม
W5503 | เข้า-แพนด้า Inplace Checker (Pandas) : การดำเนินการบน DataFrames ส่งคืน DataFrames ใหม่และควรกำหนดให้กับตัวแปร มิฉะนั้นผลลัพธ์จะหายไปและกฎจะถูกละเมิด การดำเนินการจากชุดพารามิเตอร์ที่อนุญาตและมีชุดพารามิเตอร์ in_place จะถูกแยกออก
W5504 | DataFrame-Conversion-Pandas | DataFrame Conversion Checker (Pandas) : สำหรับการแปลง DataFrame ในรหัส Pandas ให้ใช้. to_numpy () แทนค่า. หากใช้. ค่าใช้จ่ายในรหัสแพนด้ากฎจะถูกละเมิด
W5505 | Scaler-missing-scikitlearn | Scaler Missing Checker (Scikitlearn) : ตรวจสอบว่ามีการใช้ Scaler ก่อนการดำเนินการที่ไวต่อการปรับสเกลในรหัส Scikit-learn หรือไม่ การดำเนินการที่มีความอ่อนไหวต่อการปรับขนาดรวมถึงการวิเคราะห์ส่วนประกอบหลัก (PCA), เครื่องเวกเตอร์รองรับ (SVM), การไล่ระดับสีแบบสโทแคสติก (SGD), ตัวแยกประเภท Perceptron หลายชั้นและการทำให้เป็นมาตรฐาน L1 และ L2
R5506 | Hyperparameters-Scikitlearn | HyperParameter Checker (Scikitlearn) : สำหรับอัลกอริทึมการเรียนรู้ของ Scikit-learn ควรตั้งค่าพารามิเตอร์ที่สำคัญบางอย่าง
R5507 | Hyperparameter-Tensorflow | HyperParameter Checker (TensorFlow) : สำหรับอัลกอริทึมการเรียนรู้ของเครือข่ายประสาทควรตั้งค่าพารามิเตอร์ hyperparameters imporatnt บางอย่างเช่นอัตราการเรียนรู้ขนาดแบทช์โมเมนตัมและการสลายตัวของน้ำหนัก
R5508 | Hyperparameter-Pytorch | HyperParameter Checker (Pytorch) : สำหรับอัลกอริทึมการเรียนรู้ของเครือข่ายประสาทควรตั้งค่าพารามิเตอร์ hyperparameters imporatnt บางอย่างเช่นอัตราการเรียนรู้ขนาดแบทช์โมเมนตัมและการสลายตัวของน้ำหนัก
W5506 | หน่วยความจำรีลีส-ซอร์สเซอร์โฟลว์ | Checker Release Memory (TensorFlow) : หากสร้างเครือข่ายประสาทในลูปและไม่มีการใช้การดำเนินการที่ชัดเจนของหน่วยความจำกฎจะถูกละเมิด
W5507 | DECINISTION-PYTORCH | ตัวตรวจสอบการใช้อัลกอริทึมการกำหนด (pytorch) : หากอัลกอริทึม USE_DETERMINISTIC ไม่ได้ใช้ในโปรแกรม pytorch กฎจะถูกละเมิด
W5508 | การสุ่มควบคุม-นัมดี ควรใช้ ตัวตรวจสอบการควบคุมแบบสุ่ม (NUMPY) : NP.SEED () ควรใช้เพื่อรักษาความสามารถในการทำซ้ำในโปรแกรมการเรียนรู้ของเครื่อง
W5509 | แบบสุ่มควบคุม-Scikitlearn | ตัวตรวจสอบการควบคุมแบบสุ่ม (scikitlearn) : สำหรับผลลัพธ์ที่ทำซ้ำได้ระหว่างการประหารชีวิตให้ลบการใช้งานของแบบสุ่ม = ไม่มีในตัวประมาณ Scikit-learn
W5510 | การสุ่มควบคุม-ควบคุมโฟลว์ | ตัวตรวจสอบการควบคุมแบบสุ่ม (tensorflow) : ควรใช้ tf.random.set_seed () เพื่อรักษาความสามารถในการทำซ้ำในโปรแกรม tensorflow
W5511 | การสุ่มควบคุม-Pytorch | ตัวตรวจสอบการควบคุมแบบสุ่ม (pytorch) : คบเพลิง. manual_seed () ควรใช้เพื่อรักษาความสามารถในการทำซ้ำในโปรแกรม tensorflow
W5512 | การสุ่ม-ควบคุม Dataloader-Pytorch | ตัวตรวจสอบการควบคุมแบบสุ่ม (pytorch-dataloader) : Worker_init_fn () และเครื่องกำเนิดควรตั้งค่าใน Dataloader เพื่อรักษาความสามารถในการทำซ้ำ หากพวกเขาไม่ได้ตั้งค่ากฎจะถูกละเมิด
W5513 | หายไป-หน้ากาก-ปิดเทนเซอร์โฟลว์ | Mask Missing Checker (TensorFlow) : หากใช้ฟังก์ชั่นบันทึกในรหัสให้ตรวจสอบว่าค่าอาร์กิวเมนต์นั้นถูกต้องหรือไม่
W5514 | Missing-Mask-Pytorch | Mask Missing Checker (Pytorch) : หากใช้ฟังก์ชั่นบันทึกในรหัสให้ตรวจสอบว่าค่าอาร์กิวเมนต์นั้นถูกต้องหรือไม่
W5515 | Tensor-Array-Tensorflow | ตัวตรวจสอบอาร์เรย์เทนเซอร์ (tensorflow) : ใช้ tf.tensorarray () สำหรับการเติบโตของอาร์เรย์ในลูป
W5516 | Forward-Pytorch | Net Forward Checker (Pytorch) : ขอแนะนำให้ใช้ self.net () มากกว่า self.net.forward () ในรหัส pytorch หากใช้ self.net.forward () ในรหัสกฎจะถูกละเมิด
W5517 | GRADIENT-CLEAR-PYTORCH | Checker Clear Clear (Pytorch) : ควรใช้ LOSCE_FN.Backward () และ Optimizer.step () ร่วมกับ Optimizer.zero_grad () หาก .zero_grad() หายไปในรหัสกฎจะถูกละเมิด
W5518 | Pipeline-not-used-scikitlearn | Pipeline Checker (Scikitlearn) : ควรใช้ตัวประมาณค่า Scikit-learn ทั้งหมดภายในท่อเพื่อป้องกันการรั่วไหลของข้อมูลระหว่างการฝึกอบรมและข้อมูลทดสอบ
W5519 | ขึ้นอยู่กับเกณฑ์-scikitlearn | ตัวตรวจสอบเกณฑ์ที่ขึ้นอยู่กับ (TensorFlow) : หากใช้การประเมินผลตามเกณฑ์ (เช่น F-score) ในรหัสให้ตรวจสอบว่าการประเมินผลการวัดค่าเกณฑ์-อินเทนเดนเดน (เช่น AUC) ยังใช้ในรหัสหรือไม่
W5520 | ขึ้นอยู่กับเกณฑ์-เทนเซอร์โฟลว์ | ตัวตรวจสอบเกณฑ์ที่ขึ้นอยู่กับ (pytorch) : หากการประเมินผลตามเกณฑ์ (เช่น F-score) ถูกใช้ในรหัสให้ตรวจสอบว่าการประเมินผลการวัดค่าเกณฑ์-อินเทนเดนเดน (เช่น AUC) ยังใช้ในรหัสหรือไม่
W5521 | ขึ้นอยู่กับเกณฑ์-Pytorch | ตัวตรวจสอบเกณฑ์ที่ขึ้นอยู่กับ (scikitlearn) : หากการประเมินผลตามเกณฑ์ (เช่น F-score) ถูกใช้ในรหัสให้ตรวจสอบว่าการประเมินผลแบบเกณฑ์-อินเทนเดนเดนท์ (เช่น AUC) ยังใช้ในรหัสหรือไม่
DSLINTER ได้รับการพัฒนาโดย Mark Haakman และ Haiyin Zhang ในระหว่างวิทยานิพนธ์ปริญญาโทของเราที่กลุ่มวิจัยวิศวกรรมซอฟต์แวร์ (SERG) ที่ TU Delft และ AI ของ ING สำหรับ FinTech Research Lab ดูแลโดยLuís Cruz และ Arie Van Deursen
ผู้ดูแล: Haiyin Zhang [[email protected]]