การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม
random.seed(), np.random.seed(), ไฟล์การตั้งค่า YAML และการตรึงสภาพแวดล้อมด้วย pip freeze
การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดความสามารถในการทำซ้ำจึงสำคัญ
การทดลองที่คุณทำซ้ำไม่ได้ไม่ใช่วิทยาศาสตร์ หากการเรียกใช้โค้ดเดียวกันสองครั้งให้ผลลัพธ์ต่างกัน คุณจะไม่สามารถเชื่อถือการเปรียบเทียบหรือแก้ไขปัญหาการถดถอยได้
หลักการสำคัญสามประการทำให้งานปัญญาประดิษฐ์ทำซ้ำได้ ได้แก่ random seed ที่กำหนดตายตัว การแยกการกำหนดค่าออกจากโค้ด และสภาพแวดล้อมที่ตรึงรุ่นไว้
แหล่งที่มาของความไม่แน่นอน
ความไม่แน่นอนแทรกเข้ามาได้จากหลายจุด ได้แก่ การสับเปลี่ยนข้อมูล การแบ่งข้อมูลฝึกและทดสอบ การเริ่มต้นค่าน้ำหนัก การตัดการเชื่อมต่อ และการเพิ่มข้อมูล แต่ละจุดอาจใช้ตัวสร้างค่าสุ่มคนละตัว
หากต้องการทำซ้ำการทำงาน คุณต้องกำหนด random seed ให้กับตัวสร้างทุกตัวที่โค้ดของคุณใช้งาน
การกำหนดค่าเริ่มต้นให้ไพธอนและ NumPy
กำหนดค่าตัวสร้างของไลบรารีมาตรฐานไพธอนและ NumPy ให้คงที่ด้วย random seed เดียวที่เลือกไว้ (42 เป็นแนวทางที่ใช้กันทั่วไป)
import random
import numpy as np
random.seed(42)
np.random.seed(42)การกำหนดค่าเมล็ดสุ่มให้เฟรมเวิร์ก
เฟรมเวิร์กการเรียนรู้ของเครื่องมีตัวสร้างตัวเลขสุ่มของตนเอง โปรดกำหนดค่าเมล็ดสุ่มให้ตัวสร้างเหล่านั้นด้วย และส่งค่าเมล็ดสุ่มให้ฟังก์ชันที่รองรับ random_state
import numpy as np
from sklearn.model_selection import train_test_split
X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)
# torch.manual_seed(42) / tf.random.set_seed(42) for deep learningตัวช่วย set_seed
รวมการกำหนดค่าเมล็ดสุ่มทั้งหมดไว้ในฟังก์ชันเดียว แล้วเรียกใช้ฟังก์ชันนี้ที่ด้านบนสุดของทุกสคริปต์ เพื่อไม่ให้ลืมตัวสร้างตัวใดตัวหนึ่ง
import random, os
import numpy as np
def set_seed(seed=42):
random.seed(seed)
np.random.seed(seed)
os.environ["PYTHONHASHSEED"] = str(seed)
set_seed(42)การฝังค่าไฮเปอร์พารามิเตอร์ไว้ในโค้ดเป็นกับดัก
การกระจายค่า 0.01, 200, 0.2 ไปทั่วโค้ดทำให้ติดตามและเปลี่ยนแปลงการทำงานแต่ละครั้งได้ยาก ในการทำงานที่ได้ค่า score สูงสุดนั้น อัตราการเรียนรู้เป็น 0.01 หรือ 0.001 กันแน่
วิธีแก้คือใส่ไฮเปอร์พารามิเตอร์ทั้งหมดไว้ในไฟล์การตั้งค่า ไม่ใช่ในโค้ด
ไฟล์การตั้งค่า YAML
YAML เป็นรูปแบบที่มนุษย์อ่านได้ง่าย เหมาะอย่างยิ่งสำหรับการตั้งค่า ไฟล์เดียวสามารถเก็บพารามิเตอร์ทุกตัวของการทำงานหนึ่งครั้งได้
# config.yaml
seed: 42
model:
name: random_forest
n_estimators: 200
max_depth: 8
training:
test_size: 0.2
data:
path: data/processed/train.csvการอ่าน YAML ด้วย PyYAML
โหลดการตั้งค่าที่จุดเริ่มต้นของสคริปต์ด้วย PyYAML จากนั้นโค้ดของคุณจะอ่านค่าจาก cfg แทนการฝังค่าเหล่านั้นไว้ในโค้ด
import yaml
with open("config.yaml") as f:
cfg = yaml.safe_load(f)
print(cfg["model"]["n_estimators"]) # 200
set_seed(cfg["seed"])การส่งการตั้งค่าเข้าโค้ด
ฟังก์ชันรับการตั้งค่า (หรือค่าต่าง ๆ ของการตั้งค่า) เป็นอาร์กิวเมนต์ หากต้องการทำการทดลองใหม่ ให้เปลี่ยน YAML ไม่ใช่ภาษา Python
from sklearn.ensemble import RandomForestClassifier
m = cfg["model"]
model = RandomForestClassifier(
n_estimators=m["n_estimators"],
max_depth=m["max_depth"],
random_state=cfg["seed"],
)การตรึงสภาพแวดล้อม
ไลบรารีรุ่นต่างกันอาจให้ผลลัพธ์ต่างกัน โปรดตรึงรุ่นที่แน่นอนไว้ เพื่อให้ผู้อื่น (รวมถึงตัวคุณในอนาคต) ติดตั้งชุดไลบรารีเดียวกัน
# requirements.txt with pinned versions
pandas==2.2.0
scikit-learn==1.4.0
numpy==1.26.4
# generate it with:
# pip freeze > requirements.txtสภาพแวดล้อมเสมือน
แยกแต่ละโครงการออกจากกัน เพื่อไม่ให้รุ่นที่ตรึงไว้ขัดแย้งกับโครงการอื่น สร้างและเปิดใช้งานสภาพแวดล้อมเสมือน จากนั้นติดตั้งจากไฟล์ที่ตรึงรุ่นไว้
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtตรวจสอบความเข้าใจ: ไฮเปอร์พารามิเตอร์
คุณต้องการทดลองชุดไฮเปอร์พารามิเตอร์สิบแบบ และต้องการให้การทำงานแต่ละครั้งทำซ้ำได้ผลเหมือนเดิมพร้อมตรวจสอบย้อนกลับได้
สรุป: การทำซ้ำผลลัพธ์ได้
คุณได้เรียนรู้เสาหลักสามประการของปัญญาประดิษฐ์ที่ทำซ้ำผลลัพธ์ได้:
- ค่าเมล็ดสุ่ม:
random.seed(42),np.random.seed(42), ค่าเมล็ดสุ่มของเฟรมเวิร์ก และrandom_state - การตั้งค่า: ไฮเปอร์พารามิเตอร์ทั้งหมดอยู่ใน
config.yamlซึ่งโหลดด้วย PyYAML - สภาพแวดล้อม:
requirements.txtที่ตรึงรุ่นไว้ในสภาพแวดล้อมเสมือน
ให้เปลี่ยนการตั้งค่า ไม่ใช่โค้ด บทถัดไป: แนวปฏิบัติที่ดีสำหรับสมุดบันทึก Jupyter
คำถามที่พบบ่อย
บทเรียน “การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม”
random.seed(), np.random.seed(), ไฟล์การตั้งค่า YAML และการตรึงสภาพแวดล้อมด้วย pip freeze คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างไดเรกทอรีโครงการปัญญาประดิษฐ์ระดับมืออาชีพ
- Git สำหรับโครงการปัญญาประดิษฐ์
- การทำซ้ำผลลัพธ์ได้: ค่าเริ่มต้น การตั้งค่า และสภาพแวดล้อม
- แนวทางปฏิบัติที่ดีสำหรับ Jupyter Notebooks