見出し画像

PyTorchのシードを固定する

シードを固定する必要性

GANの学習では、乱数から発生させたノイズデータを生成器の入力に用います。乱数シードが固定されていないと、毎回結果が変わってしまいます。計算の結果に再現性を持たせるためには、シードを固定する必要があります。コードを以下に示します。

ソースコード

# ライブラリの読み込み
import os
import random
import numpy as np
import torch

# シードを固定するための関数
def torch_fix_seed(seed):
    os.environ['PYTHONHASHSEED'] = str(seed)
    # Python random
    random.seed(seed)
    # Numpy
    np.random.seed(seed)
    # Pytorch
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.use_deterministic_algorithms = True
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False

seed = 42
torch_fix_seed(seed)

torch_fix_seed()を.pyファイルの最初に記述して下さい。また、経験上ローカルな環境の.ipynbファイルだと固定できません。Google Colabでも、カーネルのリセット毎に結果が変わってしまいます。

GPUは固定できない

これも私の経験ですが、GPUだとこのコードを実行しても固定できません(残念ながら)。CPUは固定できます。計算結果に再現性を求めるなら、時間はかかりますが、CPUを使った方がいいかもしれません。

いいなと思ったら応援しよう!