使用kaggle kernel进行模型训练

Model training using kaggle kernel

我一直在使用 Kaggle 在 GPU 上工作。我发现每当我再次训练我的模型时,我对验证数据的准确性都会发生变化。我没有得到一致的结果。是因为我正在访问的 GPU 吗?

两个网络的初始权重通常是随机的,随机性会导致变化。这意味着第二次训练将导致略有不同的解决方案。为了确保精确的可重复性,您需要两件事:i)您的代码是确定性的,ii)随机数生成器(RNG)的相同种子。 随机数生成器是 library-specific。对于 numpytensorflow,您可以在程序的开始 (!) 处这样设置:

np.random.seed(1337)
tf.random.set_seed(1337)

这意味着反复训练网络应该会得到相同的结果。要获得不同的样本,您必须以不同的方式初始化 RNG。

non-determistic 方面对于某些优化器来说很重要。例如,Adam 曾经只是 Tensorflow/CUDA 中某些先前版本的那个,这意味着无论您多么努力都无法重现相同的执行。

话虽这么说,但如果您的代码执行 CUDNN 或 CUDA-optimized 方法,当然也会造成细微差异。在版本之间切换也可能会导致细微差异。