🦆
Seed固定はFoldの中でもした方がいいよという話
機械学習をする上で、実験結果を一定にするために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