Tensorflow 尽管GPU的结果不可复制,种子是否应该播种?

Tensorflow 尽管GPU的结果不可复制,种子是否应该播种?,tensorflow,keras,google-colaboratory,random-seed,Tensorflow,Keras,Google Colaboratory,Random Seed,我想用谷歌Colab(Tensorflow+Keras)中的GPU使用相同的训练数据集多次训练CNN架构,然后用相同的测试数据集测试这些训练模型。然后我想确定结果的平均值和标准偏差(精度),以评估CNN的性能。(我想反复训练CNN架构,因为GPU不可能产生可重复的结果) 我想知道我是否应该在每次跑步中加入不同的种子,以至少限制一点随机性 到目前为止,我已经设置了以下种子,它们的值在不同的运行中有所不同,除了os.environ['PYTHONHASHSEED']='0',我不确定是否应该设置这些

我想用谷歌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)


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

设置种子没有任何用处,除非您试图获得完全可复制的结果。因为这似乎不是你的目标,我建议不要设定任何种子。

除非你试图获得完全可重复的结果,否则设定种子是没有用的。由于这似乎不是您的目标,我建议您不要设置任何种子。

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


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

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

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