尽管由于 GPU 导致无法重现结果,是否应该播种?

Should seeds be seeded despite non-reproducible results due to GPU?

我想在 Google Colab (Tensorflow+Keras) 中使用相同的训练数据集使用 GPU 多次训练 CNN 架构,然后使用相同的测试数据集测试这些训练过的模型中的每一个。然后我想确定结果的均值和标准差(准确度)来评估 CNN 的性能。 (我想反复训练 CNN 架构,因为 GPU 无法产生可重现的结果)。

我想知道我是否应该在每个种子上放不同的种子 运行 至少稍微限制一下随机性?

到目前为止,我已经设置了以下种子,它们的值与 运行 运行 不同,除了 os.environ['PYTHONHASHSEED']='0',我不确定是否应该把它放在全部?

import os
import numpy as np
import tensorflow as tf
import random as rn

os.environ['PYTHONHASHSEED']='0'
np.random.seed(1)
rn.seed(2)
tf.set_random_seed(1)

你怎么看?我应该设置种子还是不设置任何种子?

设置种子是没有用的,除非你想得到完美可重现的结果。由于这似乎不是您的目标,我建议您不要设置任何种子。

我假设您想获得模型性能的数字或置信区间。在这种情况下,您希望性能能够解释所有随机性来源:初始化、数据改组、非确定性操作等。这意味着您应该让种子保持随机性。

将种子设置为常量值可能不会使您的模型立即具有确定性。然而,至少,它应该使你的权重初始化确定性,这通常对最终性能有重大影响,即是随机性的主要来源。如果您正在执行一些细粒度实验,我建议只修复您 seeds/initializations 并且您会期望由于随机初始化效果而难以看到性能改进的效果。