[英]How do you take randomness into account when finding the complexity of a function?
[英]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.