Learn AI with Python · Урок

Воспроизводимость: начальные значения, конфигурации и окружения

random.seed(), np.random.seed(), конфигурационные файлы YAML и закрепление окружения с помощью pip freeze.

Урок 3 из 413 шагов

«Воспроизводимость: начальные значения, конфигурации и окружения» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Зачем нужна воспроизводимость

Эксперимент, который невозможно воспроизвести, нельзя считать научным. Если один и тот же код дважды выдаёт разные результаты, вы не можете доверять сравнениям или находить причины регрессий.

Три основы делают работу с ИИ воспроизводимой: фиксированные random seed, вынесенные во внешние файлы конфигурации и зафиксированные окружения.

Источники случайности

Случайность появляется во многих местах: при перемешивании данных, разделении на обучающую и тестовую выборки, инициализации весов, исключении нейронов и дополнении данных. Каждый из этих этапов может использовать отдельный генератор случайных чисел random.

Чтобы воспроизвести запуск, необходимо задать seed для каждого генератора, которого касается ваш код.

Задание seed для Python и NumPy

Зафиксируйте генераторы стандартной библиотеки и NumPy с помощью одного выбранного 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 по всему коду затрудняет отслеживание и изменение запусков. Какой была скорость обучения — 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.

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
53
Уроки
225

Часто задаваемые вопросы

Урок «Воспроизводимость: начальные значения, конфигурации и окружения» бесплатный?

Да — полный текст урока «Воспроизводимость: начальные значения, конфигурации и окружения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 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 — локальная установка не требуется.

Все уроки этого курса

  1. Профессиональная структура каталогов проекта искусственного интеллекта
  2. Git для проектов искусственного интеллекта
  3. Воспроизводимость: начальные значения, конфигурации и окружения
  4. Лучшие практики для ноутбуков Jupyter
← Назад к Learn AI with Python