🦆

Seed固定はFoldの中でもした方がいいよという話

2021/11/30に公開

機械学習をする上で、実験結果を一定にするためにSeedを固定する必要があるのは周知の事実だと思います。
一方で、SeedはFoldの中でも固定した方がいいよ、ということまでは知らなかったので、記事に残します。

Kaggleの公開Notebookを見ると下記のような処理をよく見かけます。

train.py
seed_torch(seed=42) #seed固定化
n_folds=5
train_fold=[0,1,2,3,4]

for fold in n_folds:
  if fold in train_fold:
     処理

ここで、例えば4 Fold目だけを実行したときには train_fold=[3] と設定します。
当然ながら train_fold = [0,1,2,3,4] と設定したときと train_fold=[3] と設定した時で4 Fold目は同じ結果が出てほしいですよね。
ただ、上記の書き方では全然違う結果となってしまいます。

実際に実験した結果を見てみると以下のようになります。Fold3の乱数が揃っていませんね。

これを同じ結果にしたい場合には以下のようにFold内でseedを固定する必要があります。

知ってしまえば当たり前ですが、意外と公開NotebookでFold内でseedを固定しているコードは見たことないなぁと思いました。
教えてくださったonoderaさん、ありがとうございました!

Discussion