Learn AI with Python · 课时

可复现性:随机种子、配置与环境

使用 random.seed()、np.random.seed() 和 YAML 配置文件,并通过 pip freeze 固定环境

第 3 / 4 课13 个步骤

可复现性:随机种子、配置与环境 是 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 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,会让运行过程难以追踪和修改。在得分最佳的那次运行中,学习率究竟是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 专业人工智能项目目录结构
  2. 人工智能项目的 Git
  3. 可复现性:随机种子、配置与环境
  4. Jupyter Notebook 最佳实践
← 返回 Learn AI with Python