簡體   English   中英

在評估 model 時如何處理隨機性?

[英]How do you deal with randomness when evaluating a model?

我最近正在訓練和比較兩種深度學習模型的性能。 目前,我僅在進行訓練測試拆分時使用特定的種子。 然而,由於 model 的隨機性,即使使用相同的種子,相同 model 的損失每次都不同。 是在各處設置種子以完美控制結果還是保持隨機性更好? 如果是后者,那么我應該多次測試同一種子並平均損失還是應該選擇種子的最佳/最差表現?

此外,我閱讀了一些會議論文,他們通常通過使用一些隨機種子並對結果進行平均來評估 model,我想知道這些種子是如何選擇的。 如果我想比較兩個模型,我應該使用相同的種子(例如 model A 和 B 的種子 0、1、2)還是不同的種子(例如 model A 和種子 5 的種子 0、1、2 來測試它們, 6, 7 for model B) 取決於結果? 這意味着,無論如何總是選擇最好的? 先感謝您。

為了拆分數據,您應該為每個 model 使用相同的種子,以便每個 model 都在相同的數據上進行訓練和測試。

對於模型的訓練,除了訓練具有相同架構的兩個模型之外,這無關緊要:如果這兩個模型共享相同的種子,它們將給出相同的結果。 因此,在訓練時,您應該為相同架構的模型使用不同的種子。

您可以使用numpy.random.SeedSequence來幫助獲取種子,因為使用它可以跟蹤單個種子,但會產生唯一的隨機種子:

import numpy as np
entropy = 100
seed_sequence = np.random.SeedSequence(entropy, pool_size=5)
spawns = seed_sequence.spawn(2)
split_seeds = spawns[0].pool # for splitting train-test
# [179453401, 3816112049, 3806930416, 1196834953, 1391596624]
model_seeds = spawns[1].pool # for training models
# [2353154363,  511151844,    6211548, 1188290456, 3368787154]

請注意,您只需要跟蹤entropy pool_size設置為您想要重復實驗的次數。

如文檔中所述:

實現可重現比特流的最佳實踐是使用默認的 None 作為初始熵,然后使用 SeedSequence.entropy 記錄/腌制熵以實現重現性

因此,與其在第一次運行時指定entropy = 100 ,不如在第一次運行后完全不指定它並簡單地保存seed_sequence.entropy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM