可复现性:随机种子、配置与环境
使用 random.seed()、np.random.seed() 和 YAML 配置文件,并通过 pip freeze 固定环境
可复现性:随机种子、配置与环境 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
为何需要可复现性
无法复现的实验不是真正的科学。如果同一段代码运行两次会得到不同结果,您就无法信任比较结果,也无法调试回归问题。
三个支柱让 AI 工作具备可复现性:固定的 random seed、外置的配置以及锁定版本的环境。
随机性的来源
随机性会从许多地方悄悄进入:数据打乱、训练/测试划分、权重初始化、随机失活和数据增强。每个环节可能使用不同的随机生成器。
要复现一次运行,您必须为代码使用的每个生成器设置 seed。
为 Python 和 NumPy 设置 seed
使用一个选定的 seed(42 是常见约定)固定标准库和 NumPy 的生成器。
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 learningset_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,会让运行过程难以追踪和修改。在得分最佳的那次运行中,学习率究竟是 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使用 PyYAML 读取 YAML
请使用 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 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 53
- 课程
- 225
常见问题解答
「可复现性:随机种子、配置与环境」课时是免费的吗?
是的 — 「可复现性:随机种子、配置与环境」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「可复现性:随机种子、配置与环境」这节课中我会学到什么?
使用 random.seed()、np.random.seed() 和 YAML 配置文件,并通过 pip freeze 固定环境 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「可复现性:随机种子、配置与环境」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 专业人工智能项目目录结构
- 人工智能项目的 Git
- 可复现性:随机种子、配置与环境
- Jupyter Notebook 最佳实践