乱数のシードで実行結果を再現する
NumPy、PyTorch、Python全体で乱数シードを制御します。
「乱数のシードで実行結果を再現する」はCoddyKit上の無料MLOps Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMLOps Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MLOps Academyコースには全4レッスンが含まれています。
実行結果が異なる理由
MLでは、シャッフル、分割、重みの初期化に乱数を使います。2回実行すると、異なるモデルが得られます。シード固定により、乱数を再現可能にできます。🎲
シードとは何か
シードは、乱数生成器の開始番号です。同じシードを入力すれば、同じ乱数列が出力されます。
純粋なPythonのシードを設定する
Python独自のrandomモジュールでは、通常のPythonコードで行うシャッフルを再現可能にするためにrandom.seedが必要です。
import random
random.seed(42)NumPyのシードを設定する
データ処理の多くはNumPyを経由するため、np.random.seedを設定して配列のシャッフルとサンプリングを固定します。
import numpy as np
np.random.seed(42)PyTorchのシードを設定する
ディープラーニングの初期化とドロップアウトはPyTorchの生成器から乱数を取得するため、モデルを構築する前にtorch.manual_seedを呼び出してください。
import torch
torch.manual_seed(42)GPUを忘れない
CUDAには独自の乱数状態があるため、別途シードを設定します。cuda.manual_seed_allを使えば、すべてのGPUデバイスを一度に対象にできます。
torch.cuda.manual_seed_all(42)scikit-learnの分割にシードを設定する
train_test_splitのような関数にrandom_stateを渡すと、毎回同じ行が同じ分割に入ります。
train_test_split(X, y, random_state=42)すべてをまとめるヘルパー
すべてのシード設定呼び出しを1つのset_seed関数にまとめます。起動時に1回呼び出せば、設定漏れを防げます。
def set_seed(s):
random.seed(s)
np.random.seed(s)
torch.manual_seed(s)決定論的カーネルを強制する
シードを設定しても、一部のGPUカーネルはランダムなままです。PyTorchでdeterministicモードを有効にし、計算結果を再現可能にします。
torch.use_deterministic_algorithms(True)シードを記録する
使用したシード値は、必ずrunと一緒に記録してください。再現できない結果は、信頼できる結果とはいえません。
再現可能でも、ハードウェアが同じとは限らない
シードを設定しても、異なるハードウェアやライブラリのバージョンによって結果が変わることがあります。完全な再現性のためには、それらも固定してください。
理解度チェック
PythonとNumPyにシードを設定しましたが、PyTorchのモデルはまだ変化します。何を忘れていますか。
まとめ
Python、NumPy、PyTorch、CUDA、sklearnなど、乱数を生むすべての要素にシードを設定し、再現可能なrunのためにシードを記録する方法を学びました。🔁
よくある質問
「乱数のシードで実行結果を再現する」レッスンは無料ですか?
はい。「乱数のシードで実行結果を再現する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MLOps Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MLOps Academyコースには全4レッスンが含まれています。
「乱数のシードで実行結果を再現する」で何を学びますか?
NumPy、PyTorch、Python全体で乱数シードを制御します。 ブラウザで直接実行するハンズオンコードでMLOps Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
MLOps Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMLOps Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「乱数のシードで実行結果を再現する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMLOps Academyレッスンでコードを書いて実行できますか?
はい。すべてのMLOps Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- requirements.txtで依存関係を固定する
- 仮想環境でプロジェクトを分離する
- 乱数のシードで実行結果を再現する
- 実行設定をすべて記録する