问题:重复使用GPU训练模型(所有条件完全一致),模型结果不一致?
原则:1、训练数据与测试数据切割是一致的;2、 保证加载的训练数据是确定的;3、确定random seed ,np.random.seed,graph-level seed ,operation-level seed
方案一:
np.random.seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
实验表明:该方法无法做到模型效果复现
方案二:
SEED = 1234
random.seed(SEED)
np.random.seed(SEED)
tf.set_random_seed(SEED)
operation-level设置:
所有的tf.get_variable中的初始化加入tf.random_normal_initializer(seed=SEED)
其他的初始化方法有:
tf.constant_initializer:常量初始化函数
tf.random_normal_initializer:正态分布
tf.truncated_normal_initializer:截取的正态分布
tf.random_uniform_initializer:均匀分布
tf.zeros_initializer:全部是0
tf.ones_initializer:全是1
tf.uniform_unit_scaling_initializer:满足均匀分布,但不影响输出数量级的随机值
dropout函数中加入参数seed=SEED
GRUCELL中加入核权重kernel_initializer=tf.orthogonal_initializer
其实验数据表明无法消除随机性,但结果差异变小;