python&pytouchランダムシードの実現を簡単に述べます。


乱数は科学的な研究に広く使われていますが、計算機は本物の乱数を生成できません。疑似乱数となります。その生成過程:ランダムシード(正の整数)を与え、ランダムアルゴリズムとシードに基づいて乱数列を生成します。同じランダムシードを与えられました。コンピュータで発生される乱数列は同じです。
ランダムシードは何ですか?
ランダムシードはランダム法のためにある。
ランダム方法:一般的なランダム方法は乱数を生成することと、他のランダム順序などがあり、後者も本質的に乱数の生成に基づいて実現される。深さ学習では、比較的に一般的なランダム方法の応用として、ネットワークのランダム初期化、トレーニングセットのランダムシャッフルなどがある。
ランダムシードの取得範囲?
10,1000のような任意の数字があります。
python rand m
以下はpythonのランドム関数を例にとって、テストを行いました。
在这里插入图片描述
ユーザがランダムシードを指定していない場合、システムのデフォルトランダム生成は、一般的にシステムの現在の時間と関係があります。ユーザがランダムシードを指定した後、ランダム関数を使用して生成した乱数を再現できます。シードの決定後、ランダム関数を使用するたびにランダムシーケンスから乱数を取得するのに相当します。毎回取得する乱数は異なります。
pytoch
pytouchの再现効果を使うと、いつも完全な复现ができません。同じコードを二回実行します。时には大きな违いがあります。アルゴリズムのランダム性によるものです。毎回得られる结果が一致するためには、ランダムな种を固定しなければなりません。まず、アルゴリズムはどこでランダム性を使って、それに応じてランダムな种を固定しますか?

def seed_torch():
	seed = 1024 #     
 # seed = int(time.time()*256)
 #       
 with open('seed.txt', 'w') as f:
  f.write(str(seed))
 random.seed(seed)
 os.environ['PYTHONHASHSEED'] = str(seed)
 np.random.seed(seed)
 torch.manual_seed(seed)
 torch.cuda.manual_seed(seed)
 torch.cuda.manual_seed_all(seed)
 torch.backends.cudnn.benchmark = False
 torch.backends.cudnn.deterministic = True
seed_torch()
上のコードはpytouchの常用するランダムな種を固定しましたが、もし前処理にランダム性が含まれていたら、固定する必要があります。
結果を再現するためにランダムシードを固定しました。しかし、pytouchトレーニングモデルによっては、異なるランダムシードが異なる結果を生みます。固定されたランダムシードを使うたびに、良い結果が失われる可能性があります。そのために、毎回違ったランダムシードを使って、保存できます。
 ここでは、簡単なpython&pytouchランダムシードの実現に関する記事を紹介します。pytochに関するランダムなシードの内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。