tf 随机种子固定

reference

  • 深度学习模型稳定,设定随机种子大全

    这个解释了下解决方案中 最基本的设置种子方式 里面 的每一行的含义

  • Tensorflow随机数生成种子tf.set_random_seed()

    这个做实验证明了:图级别的随机种子设置 和 op级别的随机种子设置的区别 ,以及 前者可以涵盖后者 的特性

  • stackoverflow:How to get stable results with TensorFlow, setting random seed

    高赞:tf.set_random_seed只是设定了当前图的默认seed,所以每次创建一张新的图,应该在其作用域内重新设定一下种子

  • stackoverflow:reproducible-results-in-tensorflow-with-tf-set-random-seed

    tf里的随机数生成,不仅受你设置的seed值的影响,定,计算图的随机种子实际上是当前计算图的最后一个操作的id号– 创建图后,需要先设置随机数种子,然后再生成随机数算子。
    那我其实就不是很理解这里的tf.set_random_seed的作用了( 似乎完全咩有起作用… )

  • 注意,GPU上的随机数目前是无法设置多次运行固定死的 – 公知

    • reddit的这个回答似乎是有办法 (还未尝试过),在下述解决方案的基础上要加如下的代码 [记得也有人说这是tf2才有效的方式,对tf1无效…]:
      os.environ['TF_DETERMINISTIC_OPS'] = '1'
      os.environ['TF_CUDNN_DETERMINISTIC'] = '1'
      tf.config.threading.set_inter_op_parallelism_threads(1)
      tf.config.threading.set_intra_op_parallelism_threads(1)
      

解决方案

  • 最基本的
    def seed_tensorflow(seed=1217):
        import random
        import os
        random.seed(seed)
        os.environ['PYTHONHASHSEED'] = str(seed)
        np.random.seed(seed)
        tf.set_random_seed(seed)	# , disable_gpu = TRUE
    
        # the below seems configs that work for tf2
        os.environ['TF_DETERMINISTIC_OPS'] = '1'
        os.environ['TF_CUDNN_DETERMINISTIC'] = '1'
    
        tf.config.threading.set_inter_op_parallelism_threads(1)
        tf.config.threading.set_intra_op_parallelism_threads(1)
    

版权声明:本文为Hesy_H原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。