深層学習ネットワーク モデルの初期重みパラメーターは通常、乱数に初期化され、勾配降下法を使用して最終的に得られる局所最適解は、初期位置点の選択に非常に敏感です。著者のオープンソース深層学習コードを完全に再現するために、ランダム シードを選択すると、アルゴリズム結果のランダム性をある程度まで低減でき、元の著者の結果に近づくことができます。つまり、ランダム シードの生成は実験の実行を意味します。毎回同じ乱数を生成します。論文を確実に複製できるようにするために、次の方法を使用してランダム シードを修正できます。
困っている友達は、次のコードを train.py に挿入できます。
def seed_torch(seed=0):
seed=0
# torch.backends.cudnn.enabled = True # pytorch 使用CUDANN 加速,即使用GPU加速
torch.backends.cudnn.benchmark = False # cuDNN使用的非确定性算法自动寻找最适合当前配置的高效算法,设置为False 则每次的算法一致
torch.backends.cudnn.deterministic = True # 设置每次返回的卷积算法是一致的
torch.manual_seed(seed) # 为当前CPU 设置随机种子
torch.cuda.manual_seed(seed) # 为当前的GPU 设置随机种子
torch.cuda.manual_seed_all(seed) # 当使用多块GPU 时,均设置随机种子
np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)