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を使った方がいいかもしれません。