Tensorflow中关于随机数生成种子tf.set_random_seed()

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31878983/article/details/79495810
                                        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css">
                    <div class="htmledit_views">
            <pre onclick="hljs.copyCode(event)"><code class="language-python hljs">

   Tensorflow中的随机数生成种子是在数据流图资源上运作的。每一个数据流图中,我们可以执行针对随机数生成种子应用不同的操作(operation)。事实上,随机数生成种子作为random系列函数的参数之一,可在相应的参数列表进行设置,这就是op-level的操作。与之对应的是graph-leveltf.set_random_seed()的操作tf.set_random_seed(),它管理着同一数据流图下的资源。

   
   
    我们结合相应代码做简单的分析
[python] view plain copy
print ?
  1. <code class=“language-python”>import tensorflow as  tf  
  2. # Repeatedly running this block with the same graph will generate the same  
  3. # sequences of ‘a’ and ‘b’.  
  4. g1 = tf.Graph()  
  5. g2 = tf.Graph()  
  6. print(“Graph 1”)  
  7. with g1.as_default():  
  8.     tf.set_random_seed(-1)  
  9.     a = tf.random_uniform([1])  
  10.     b = tf.random_normal([1])  
  11.     print(“Session 1”)  
  12.     with tf.Session() as sess1:  
  13.         print(sess1.run(a))  # generates ‘A1’  
  14.         print(sess1.run(a))  # generates ‘A2’  
  15.         print(sess1.run(b))  # generates ‘B1’  
  16.         print(sess1.run(b))  # generates ‘B2’  
  17.     print(“Session 2”)  
  18.     with tf.Session() as sess2:  
  19.         print(sess2.run(a))  # generates ‘A1’  
  20.         print(sess2.run(a))  # generates ‘A2’  
  21.         print(sess2.run(b))  # generates ‘B1’  
  22.         print(sess2.run(b))  # generates ‘B2  
  23. print(“————–”)  
  24. print(“Graph 2”)  
  25. with g2.as_default():  
  26.     a = tf.random_uniform([1])  
  27.     b = tf.random_normal([1],seed=-1)  
  28.     print(“Session 3”)  
  29.     with tf.Session() as sess3:  
  30.         print(sess3.run(a))  # generates ‘A1’  
  31.         print(sess3.run(a))  # generates ‘A2’  
  32.         print(sess3.run(b))  # generates ‘B1’  
  33.         print(sess3.run(b))  # generates ‘B2’  
  34.     print(“Session 4”)  
  35.     with tf.Session() as sess4:  
  36.         print(sess4.run(a))  # generates ‘A3’  
  37.         print(sess4.run(a))  # generates ‘A4’  
  38.         print(sess4.run(b))  # generates ‘B1’  
  39.         print(sess4.run(b))  # generates ‘B2’</code>  

    
    
  1. import tensorflow as tf
  2. # Repeatedly running this block with the same graph will generate the same
  3. # sequences of 'a' and 'b'.
  4. g1 = tf.Graph()
  5. g2 = tf.Graph()
  6. print( "Graph 1")
  7. with g1.as_default():
  8. tf.set_random_seed( -1)
  9. a = tf.random_uniform([ 1])
  10. b = tf.random_normal([ 1])
  11. print( "Session 1")
  12. with tf.Session() as sess1:
  13. print(sess1.run(a)) # generates 'A1'
  14. print(sess1.run(a)) # generates 'A2'
  15. print(sess1.run(b)) # generates 'B1'
  16. print(sess1.run(b)) # generates 'B2'
  17. print( "Session 2")
  18. with tf.Session() as sess2:
  19. print(sess2.run(a)) # generates 'A1'
  20. print(sess2.run(a)) # generates 'A2'
  21. print(sess2.run(b)) # generates 'B1'
  22. print(sess2.run(b)) # generates 'B2
  23. print( "--------------")
  24. print( "Graph 2")
  25. with g2.as_default():
  26. a = tf.random_uniform([ 1])
  27. b = tf.random_normal([ 1],seed= -1)
  28. print( "Session 3")
  29. with tf.Session() as sess3:
  30. print(sess3.run(a)) # generates 'A1'
  31. print(sess3.run(a)) # generates 'A2'
  32. print(sess3.run(b)) # generates 'B1'
  33. print(sess3.run(b)) # generates 'B2'
  34. print( "Session 4")
  35. with tf.Session() as sess4:
  36. print(sess4.run(a)) # generates 'A3'
  37. print(sess4.run(a)) # generates 'A4'
  38. print(sess4.run(b)) # generates 'B1'
  39. print(sess4.run(b)) # generates 'B2'

   
   
  1. #程序输出
  2. Graph 1
  3. Session 1
  4. [ 0.45231807]
  5. [ 0.82921326]
  6. [ -0.90662855]
  7. [ 0.52898115]
  8. Session 2
  9. [ 0.45231807]
  10. [ 0.82921326]
  11. [ -0.90662855]
  12. [ 0.52898115]
  13. --------------
  14. Graph 2
  15. Session 3
  16. [ 0.18341184]
  17. [ 0.42214954]
  18. [ -0.96254766]
  19. [ -1.088825]
  20. Session 4
  21. [ 0.40388882]
  22. [ 0.7478839]
  23. [ -0.96254766]
  24. [ -1.088825]

    在Graph1中,我们通过tf.set_random_seed()函数对该图资源下的全局随机数生成种子进行设置,使得不同Session中的random系列函数表现出相对协同的特征,这就是Graph-Level的表现;
   在Graph2中,我们仅对张量b进行了seed设置,可以发现,这是Op-Level的表现,仅在执行张量b的情况下,才会有和Graph1类似的协同效果。另外,值得注意的是,seed的传参类型为integer,所以只要是整数(如果过大,源码中会进行截断),就能完成它的设置(可以是1234、87654321等),效果和上述的-1是一样的。


 
     
[python] view plain copy
print ?
  1.   
 
     




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31878983/article/details/79495810
                                        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css">
                    <div class="htmledit_views">
            <pre onclick="hljs.copyCode(event)"><code class="language-python hljs">

   Tensorflow中的随机数生成种子是在数据流图资源上运作的。每一个数据流图中,我们可以执行针对随机数生成种子应用不同的操作(operation)。事实上,随机数生成种子作为random系列函数的参数之一,可在相应的参数列表进行设置,这就是op-level的操作。与之对应的是graph-leveltf.set_random_seed()的操作tf.set_random_seed(),它管理着同一数据流图下的资源。

 
 
    我们结合相应代码做简单的分析
[python] view plain copy
print ?
  1. <code class=“language-python”>import tensorflow as  tf  
  2. # Repeatedly running this block with the same graph will generate the same  
  3. # sequences of ‘a’ and ‘b’.  
  4. g1 = tf.Graph()  
  5. g2 = tf.Graph()  
  6. print(“Graph 1”)  
  7. with g1.as_default():  
  8.     tf.set_random_seed(-1)  
  9.     a = tf.random_uniform([1])  
  10.     b = tf.random_normal([1])  
  11.     print(“Session 1”)  
  12.     with tf.Session() as sess1:  
  13.         print(sess1.run(a))  # generates ‘A1’  
  14.         print(sess1.run(a))  # generates ‘A2’  
  15.         print(sess1.run(b))  # generates ‘B1’  
  16.         print(sess1.run(b))  # generates ‘B2’  
  17.     print(“Session 2”)  
  18.     with tf.Session() as sess2:  
  19.         print(sess2.run(a))  # generates ‘A1’  
  20.         print(sess2.run(a))  # generates ‘A2’  
  21.         print(sess2.run(b))  # generates ‘B1’  
  22.         print(sess2.run(b))  # generates ‘B2  
  23. print(“————–”)  
  24. print(“Graph 2”)  
  25. with g2.as_default():  
  26.     a = tf.random_uniform([1])  
  27.     b = tf.random_normal([1],seed=-1)  
  28.     print(“Session 3”)  
  29.     with tf.Session() as sess3:  
  30.         print(sess3.run(a))  # generates ‘A1’  
  31.         print(sess3.run(a))  # generates ‘A2’  
  32.         print(sess3.run(b))  # generates ‘B1’  
  33.         print(sess3.run(b))  # generates ‘B2’  
  34.     print(“Session 4”)  
  35.     with tf.Session() as sess4:  
  36.         print(sess4.run(a))  # generates ‘A3’  
  37.         print(sess4.run(a))  # generates ‘A4’  
  38.         print(sess4.run(b))  # generates ‘B1’  
  39.         print(sess4.run(b))  # generates ‘B2’</code>  

  
  
  1. import tensorflow as tf
  2. # Repeatedly running this block with the same graph will generate the same
  3. # sequences of 'a' and 'b'.
  4. g1 = tf.Graph()
  5. g2 = tf.Graph()
  6. print( "Graph 1")
  7. with g1.as_default():
  8. tf.set_random_seed( -1)
  9. a = tf.random_uniform([ 1])
  10. b = tf.random_normal([ 1])
  11. print( "Session 1")
  12. with tf.Session() as sess1:
  13. print(sess1.run(a)) # generates 'A1'
  14. print(sess1.run(a)) # generates 'A2'
  15. print(sess1.run(b)) # generates 'B1'
  16. print(sess1.run(b)) # generates 'B2'
  17. print( "Session 2")
  18. with tf.Session() as sess2:
  19. print(sess2.run(a)) # generates 'A1'
  20. print(sess2.run(a)) # generates 'A2'
  21. print(sess2.run(b)) # generates 'B1'
  22. print(sess2.run(b)) # generates 'B2
  23. print( "--------------")
  24. print( "Graph 2")
  25. with g2.as_default():
  26. a = tf.random_uniform([ 1])
  27. b = tf.random_normal([ 1],seed= -1)
  28. print( "Session 3")
  29. with tf.Session() as sess3:
  30. print(sess3.run(a)) # generates 'A1'
  31. print(sess3.run(a)) # generates 'A2'
  32. print(sess3.run(b)) # generates 'B1'
  33. print(sess3.run(b)) # generates 'B2'
  34. print( "Session 4")
  35. with tf.Session() as sess4:
  36. print(sess4.run(a)) # generates 'A3'
  37. print(sess4.run(a)) # generates 'A4'
  38. print(sess4.run(b)) # generates 'B1'
  39. print(sess4.run(b)) # generates 'B2'

 
 
  1. #程序输出
  2. Graph 1
  3. Session 1
  4. [ 0.45231807]
  5. [ 0.82921326]
  6. [ -0.90662855]
  7. [ 0.52898115]
  8. Session 2
  9. [ 0.45231807]
  10. [ 0.82921326]
  11. [ -0.90662855]
  12. [ 0.52898115]
  13. --------------
  14. Graph 2
  15. Session 3
  16. [ 0.18341184]
  17. [ 0.42214954]
  18. [ -0.96254766]
  19. [ -1.088825]
  20. Session 4
  21. [ 0.40388882]
  22. [ 0.7478839]
  23. [ -0.96254766]
  24. [ -1.088825]

    在Graph1中,我们通过tf.set_random_seed()函数对该图资源下的全局随机数生成种子进行设置,使得不同Session中的random系列函数表现出相对协同的特征,这就是Graph-Level的表现;
   在Graph2中,我们仅对张量b进行了seed设置,可以发现,这是Op-Level的表现,仅在执行张量b的情况下,才会有和Graph1类似的协同效果。另外,值得注意的是,seed的传参类型为integer,所以只要是整数(如果过大,源码中会进行截断),就能完成它的设置(可以是1234、87654321等),效果和上述的-1是一样的。


 
   
[python] view plain copy
print ?
  1.   
 
   



猜你喜欢

转载自blog.csdn.net/qq_31511955/article/details/81948902