再現性:シード、設定、環境
random.seed()、np.random.seed()、YAML 設定ファイル、pip freeze による環境の固定を扱います。
「再現性:シード、設定、環境」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
再現性が重要な理由
再現できない実験は、科学とはいえません。同じコードを2回実行して異なる結果が出るなら、比較結果を信頼できず、リグレッションの原因も調査できません。
AIの作業を再現可能にする柱は、固定した乱数シード、外部化した設定、固定した環境の3つです。
乱数が生じる場所
データのシャッフル、学習用とテスト用への分割、重みの初期化、ドロップアウト、データ拡張など、さまざまな場所で乱数が入り込みます。それぞれが異なる乱数生成器を使う場合もあります。
実行を再現するには、コードが使用するすべての乱数生成器にシードを設定する必要があります。
PythonとNumPyにシードを設定する
選んだ1つのシード(42がよく使われる慣例です)で、標準ライブラリとNumPyの乱数生成器を固定します。
import random
import numpy as np
random.seed(42)
np.random.seed(42)フレームワークのシード設定
MLフレームワークには、それぞれ独自のジェネレーターがあります。それらにもシードを設定し、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 ヘルパー
すべてのシード設定を1つの関数にまとめ、すべてのスクリプトの先頭で呼び出します。こうすれば、ジェネレーターの設定を忘れません。
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 は人間が読みやすい形式で、設定に適しています。1つのファイルに、1回の実行に必要なすべての設定項目を記録できます。
# config.yaml
seed: 42
model:
name: random_forest
n_estimators: 200
max_depth: 8
training:
test_size: 0.2
data:
path: data/processed/train.csvPyYAMLで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"])設定をコードに渡す
関数には、設定そのもの、または設定値を引数として渡します。新しい実験を実行するときは、PythonではなくYAMLを変更します。
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クイックチェック:ハイパーパラメータ
10通りの異なるハイパーパラメータの組み合わせを試し、それぞれの実行を再現可能かつ追跡可能な状態で保存したいとします。
まとめ:再現性
再現可能なAIを支える3つの柱を学びました。
- シード:
random.seed(42)、np.random.seed(42)、フレームワークのシード、random_state - 設定:すべてのハイパーパラメータを
config.yamlに置き、PyYAMLで読み込む - 環境:仮想環境内でバージョンを固定した
requirements.txtを使用する
コードではなく設定を変更します。次は、Jupyterノートブックのベストプラクティスです。
よくある質問
「再現性:シード、設定、環境」レッスンは無料ですか?
はい。「再現性:シード、設定、環境」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「再現性:シード、設定、環境」で何を学びますか?
random.seed()、np.random.seed()、YAML 設定ファイル、pip freeze による環境の固定を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「再現性:シード、設定、環境」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。