มีส่วนร่วมในโค้ด TensorFlow

ไม่ว่าคุณจะเพิ่มฟังก์ชันการสูญเสีย ปรับปรุงความครอบคลุมของการทดสอบ หรือเขียน RFC สำหรับการเปลี่ยนแปลงการออกแบบที่สำคัญ คู่มือผู้สนับสนุนส่วนนี้จะช่วยคุณในการเริ่มต้น ขอบคุณสำหรับการทำงานและความสนใจในการปรับปรุง TensorFlow

ก่อนที่คุณจะเริ่มต้น

ก่อนที่คุณจะสนับสนุนซอร์สโค้ดให้กับโปรเจ็กต์ TensorFlow โปรดตรวจสอบไฟล์ CONTRIBUTING.md ในที่เก็บ GitHub ของโปรเจ็กต์ ตัวอย่างเช่น ดูไฟล์ CONTRIBUTING.md ใน repo TensorFlow หลัก ผู้ร่วมเขียนโค้ดทุกคนจะต้องลงนามใน ข้อตกลงใบอนุญาตผู้ร่วมให้ข้อมูล (CLA)

เพื่อหลีกเลี่ยงงานที่ซ้ำกัน โปรดตรวจสอบ RFC ปัจจุบัน หรือ ที่เสนอ และติดต่อนักพัฒนาในฟอรัม TensorFlow ( developers@tensorflow.org ) ก่อนที่คุณจะเริ่มทำงานกับฟีเจอร์ที่ไม่สำคัญ เราค่อนข้างเลือกสรรเมื่อตัดสินใจเพิ่มฟังก์ชันการทำงานใหม่ และวิธีที่ดีที่สุดในการสนับสนุนและช่วยเหลือโครงการคือการทำงานในประเด็นที่ทราบ

ปัญหาสำหรับผู้มีส่วนร่วมรายใหม่

ผู้ร่วมให้ข้อมูลรายใหม่ควรมองหาแท็กต่อไปนี้เมื่อค้นหาการสนับสนุนครั้งแรกในฐานโค้ด TensorFlow เราขอแนะนำอย่างยิ่งให้ผู้มีส่วนร่วมรายใหม่จัดการโครงการ "ประเด็นแรกที่ดี" และ "ยินดีต้อนรับการมีส่วนร่วม" ก่อน สิ่งนี้จะช่วยให้ผู้มีส่วนร่วมคุ้นเคยกับเวิร์กโฟลว์การสนับสนุน และเพื่อให้นักพัฒนาหลักทำความคุ้นเคยกับผู้ร่วมให้ข้อมูล

หากคุณสนใจที่จะสรรหาทีมเพื่อช่วยจัดการกับปัญหาใหญ่หรือฟีเจอร์ใหม่ โปรดส่งอีเมลไปที่ กลุ่มนักพัฒนา@ และตรวจสอบรายการ RFC ปัจจุบันของเรา

ตรวจสอบรหัส

คุณสมบัติใหม่ การแก้ไขข้อบกพร่อง และการเปลี่ยนแปลงอื่น ๆ ที่เกิดขึ้นกับฐานโค้ดอาจมีการตรวจสอบโค้ด

การตรวจสอบโค้ดที่สนับสนุนโปรเจ็กต์เนื่องจากคำขอดึงเป็นองค์ประกอบสำคัญของการพัฒนา TensorFlow เราขอแนะนำให้ทุกคนเริ่มตรวจสอบโค้ดที่นักพัฒนารายอื่นส่งมา โดยเฉพาะอย่างยิ่งหากฟีเจอร์นี้เป็นสิ่งที่คุณน่าจะใช้

ต่อไปนี้เป็นคำถามบางส่วนที่ควรคำนึงถึงในระหว่างกระบวนการตรวจสอบโค้ด:

  • เราต้องการสิ่งนี้ใน TensorFlow หรือไม่? มีแนวโน้มว่าจะได้ใช้หรือเปล่า? คุณในฐานะผู้ใช้ TensorFlow ชอบการเปลี่ยนแปลงและตั้งใจที่จะใช้มันหรือไม่ การเปลี่ยนแปลงในขอบเขตของ TensorFlow นี้หรือไม่ ค่าใช้จ่ายในการบำรุงรักษาฟีเจอร์ใหม่จะคุ้มค่ากับผลประโยชน์หรือไม่
  • รหัสสอดคล้องกับ TensorFlow API หรือไม่ ฟังก์ชั่นสาธารณะ คลาส และพารามิเตอร์ได้รับการตั้งชื่ออย่างดีและได้รับการออกแบบตามสัญชาตญาณหรือไม่
  • มีเอกสารประกอบด้วยหรือเปล่า? ฟังก์ชันสาธารณะ คลาส พารามิเตอร์ ประเภทการส่งคืน และแอตทริบิวต์ที่จัดเก็บทั้งหมดได้รับการตั้งชื่อตามแบบแผนของ TensorFlow และมีการบันทึกไว้อย่างชัดเจนหรือไม่ ฟังก์ชันใหม่มีการอธิบายไว้ในเอกสารของ TensorFlow และมีภาพประกอบพร้อมตัวอย่างทุกครั้งที่เป็นไปได้หรือไม่ เอกสารแสดงผลอย่างถูกต้องหรือไม่?

  • รหัสนี้มนุษย์สามารถอ่านได้หรือไม่? มีความซ้ำซ้อนต่ำหรือไม่? ควรปรับปรุงชื่อตัวแปรเพื่อความชัดเจนหรือสม่ำเสมอหรือไม่ ควรเพิ่มความคิดเห็นหรือไม่? ความคิดเห็นใด ๆ ควรถูกลบออกเนื่องจากไม่เป็นประโยชน์หรือไม่มีประโยชน์หรือไม่?

  • รหัสมีประสิทธิภาพหรือไม่? มันสามารถเขียนใหม่ได้อย่างง่ายดายเพื่อให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้นหรือไม่?

  • โค้ด ย้อนหลังเข้ากันได้ กับ TensorFlow เวอร์ชันก่อนหน้าหรือไม่

  • รหัสใหม่จะเพิ่ม การขึ้นต่อกันใหม่ กับไลบรารีอื่นหรือไม่

ทดสอบและปรับปรุงความครอบคลุมของการทดสอบ

การทดสอบหน่วยคุณภาพสูงถือเป็นรากฐานสำคัญของกระบวนการพัฒนา TensorFlow เพื่อจุดประสงค์นี้ เราใช้อิมเมจ Docker ฟังก์ชันการทดสอบได้รับการตั้งชื่ออย่างเหมาะสม และมีหน้าที่ตรวจสอบความถูกต้องของอัลกอริทึมตลอดจนตัวเลือกต่างๆ ของโค้ด

คุณสมบัติใหม่และการแก้ไขข้อบกพร่องทั้งหมด ต้อง มีการทดสอบครอบคลุมเพียงพอ นอกจากนี้เรายังยินดีรับการมีส่วนร่วมของกรณีทดสอบใหม่หรือการปรับปรุงการทดสอบที่มีอยู่ หากคุณพบว่าการทดสอบที่มีอยู่ของเรายังไม่เสร็จสมบูรณ์ แม้ว่าจะยังไม่ก่อให้เกิดข้อบกพร่องก็ตาม โปรดแจ้งปัญหาและหากเป็นไปได้ ให้ยื่นคำขอดึงข้อมูล

สำหรับรายละเอียดเฉพาะของขั้นตอนการทดสอบในแต่ละโปรเจ็กต์ TensorFlow โปรดดูไฟล์ README.md และ CONTRIBUTING.md ในที่เก็บโปรเจ็กต์บน GitHub

ข้อกังวลเป็นพิเศษใน การทดสอบที่เหมาะสม :

  • มีการทดสอบ งานสาธารณะและชั้นเรียนทุกครั้ง หรือไม่?
  • มีการทดสอบ ชุดพารามิเตอร์ ค่า ประเภทค่า และชุดค่าผสมที่สมเหตุสมผล หรือไม่
  • การทดสอบตรวจสอบว่า โค้ดถูกต้องหรือไม่ และกำลัง ทำสิ่งที่เอกสารระบุว่า โค้ดนั้นตั้งใจทำหรือไม่
  • หากการเปลี่ยนแปลงเป็นการแก้ไขข้อบกพร่อง จะมี การทดสอบแบบไม่ถดถอย รวมอยู่ด้วยหรือไม่
  • การทดสอบ ผ่านการสร้างการบูรณาการอย่างต่อเนื่อง หรือไม่
  • การทดสอบ ครอบคลุมโค้ดทุกบรรทัดหรือไม่ หากไม่เป็นเช่นนั้น ข้อยกเว้นมีความสมเหตุสมผลและชัดเจนหรือไม่

หากคุณพบปัญหาใดๆ โปรดช่วยผู้มีส่วนร่วมเข้าใจปัญหาเหล่านั้นและแก้ไข

ปรับปรุงข้อความแสดงข้อผิดพลาดหรือบันทึก

เรายินดีรับการมีส่วนร่วมที่ช่วยปรับปรุงข้อความแสดงข้อผิดพลาดและการบันทึก

เวิร์กโฟลว์การบริจาค

การสนับสนุนโค้ด เช่น การแก้ไขข้อบกพร่อง การพัฒนาใหม่ การปรับปรุงการทดสอบ ทั้งหมดนี้เป็นไปตามเวิร์กโฟลว์ที่เน้น GitHub เป็นศูนย์กลาง หากต้องการเข้าร่วมการพัฒนา TensorFlow ให้ตั้งค่าบัญชี GitHub แล้ว:

  1. แยก repo ที่คุณวางแผนจะทำงาน ไปที่หน้า repo โครงการและใช้ปุ่ม Fork สิ่งนี้จะสร้างสำเนาของ repo ภายใต้ชื่อผู้ใช้ของคุณ (สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีแยกพื้นที่เก็บข้อมูล โปรดดู คำแนะนำนี้ )

  2. โคลน repo ลงในระบบภายในเครื่องของคุณ

    $ git clone git@github.com:your-user-name/project-name.git

  3. สร้างสาขาใหม่เพื่อเก็บงานของคุณ

    $ git checkout -b new-branch-name

  4. ทำงานกับรหัสใหม่ของคุณ เขียนและรันการทดสอบ

  5. ยอมรับการเปลี่ยนแปลงของคุณ

    $ git add -A

    $ git commit -m "commit message here"

  6. ผลักดันการเปลี่ยนแปลงของคุณไปยัง repo GitHub ของคุณ

    $ git push origin branch-name

  7. เปิด คำขอดึง (PR) ไปที่ repo โปรเจ็กต์ดั้งเดิมบน GitHub จะมีข้อความเกี่ยวกับสาขาที่เพิ่งพุชของคุณ ถามว่าคุณต้องการเปิดคำขอดึงหรือไม่ ปฏิบัติตามคำแนะนำ เปรียบเทียบระหว่างที่เก็บ และส่ง PR ระบบจะส่งอีเมลไปยังผู้คอมมิต คุณอาจต้องการพิจารณาส่งอีเมลไปยังรายชื่อผู้รับจดหมายเพื่อให้มองเห็นได้มากขึ้น (สำหรับรายละเอียดเพิ่มเติม โปรดดู คู่มือ GitHub บน PRs

  8. ผู้ดูแลและผู้มีส่วนร่วมอื่นๆ จะ ตรวจสอบ PR ของคุณ โปรดเข้าร่วมการสนทนา และพยายาม ทำการเปลี่ยนแปลงตามที่ร้องขอ เมื่อ PR ได้รับการอนุมัติ รหัสจะถูกรวมเข้าด้วยกัน

ก่อนที่จะดำเนินการสนับสนุนครั้งต่อไป ตรวจ สอบให้แน่ใจว่าพื้นที่เก็บข้อมูลในเครื่องของคุณเป็นข้อมูลล่าสุด

  1. ตั้งค่ารีโมทอัปสตรีม (คุณต้องทำสิ่งนี้เพียงครั้งเดียวต่อโครงการ ไม่ใช่ทุกครั้ง)

    $ git remote add upstream git@github.com:tensorflow/project-repo-name

  2. สลับไปที่สาขาหลักในพื้นที่

    $ git checkout master

  3. ดึงการเปลี่ยนแปลงจากต้นทางลงมา

    $ git pull upstream master

  4. ผลักดันการเปลี่ยนแปลงไปยังบัญชี GitHub ของคุณ (ไม่บังคับ แต่เป็นแนวทางปฏิบัติที่ดี)

    $ git push origin master

  5. สร้างสาขาใหม่หากคุณกำลังเริ่มทำงานใหม่

    $ git checkout -b branch-name

ทรัพยากร git และ GitHub เพิ่มเติม:

รายการตรวจสอบผู้ร่วมให้ข้อมูล