zoukankan      html  css  js  c++  java
  • random tensor-随机生成种子操作(tf.set_random_seed(interger))

    random seed操作其实分为两种:graph-level(图级)和op-level(操作级),随机数生成种子是在数据流图资源上运作的,接下来让我具体介绍它们。

    第一种情况:要在Session中生成不同的序列,请既不设置图级别也不设置op级别种子:

    a = tf.random_uniform([1])
    b = tf.random_normal([1])
    print( "Session 1")
    with tf.Session() as sess1:
      print (sess1.run(a))  # generates 'A1'
      print (sess1.run(a))  # generates 'A2'
      print (sess1.run(b))  # generates 'B1'
      print (sess1.run(b))  # generates 'B2'
    
    print( "Session 2")
    with tf.Session() as sess2:
      print (sess2.run(a))  # generates 'A3'
      print (sess2.run(a))  # generates 'A4'
      print (sess2.run(b))  # generates 'B3'
      print (sess2.run(b))  # generates 'B4'

      实验结果:

    可以明显看出,无论是在同一个Session还是在不同的Session中,生成的序列都不同。

    第二种情况:要为跨Session生成相同的可重复序列,请为op设置种子:

    import tensorflow as tf
    
    a = tf.random_uniform([1], seed=1)     #op-level 随机生成种子
    b = tf.random_normal([1])
    
    print( "Session 1")
    with tf.Session() as sess1:
      print (sess1.run(a))  # generates 'A1'
      print (sess1.run(a))  # generates 'A2'
      print (sess1.run(b))  # generates 'B1'
      print (sess1.run(b))  # generates 'B2'
    
    print( "Session 2")
    with tf.Session() as sess2:
      print (sess2.run(a))  # generates 'A3'
      print (sess2.run(a))  # generates 'A4'
      print (sess2.run(b))  # generates 'B3'
      print (sess2.run(b))  # generates 'B4'
    

     实验结果:

     

    明显可以看出在op-level级随机生成种子的操作后,同一个Session内生成不同的序列,跨Session生成相同的序列。

    第三种情况:要使所有生成的随机序列在会话中可重复,就要设置图级别的种子:

    import tensorflow as tf
    
    tf.set_random_seed(1234)
    a = tf.random_uniform([1])
    b = tf.random_normal([1])
    
    print( "Session 1")
    with tf.Session() as sess1:
      print (sess1.run(a))  # generates 'A1'
      print (sess1.run(a))  # generates 'A2'
      print (sess1.run(b))  # generates 'B1'
      print (sess1.run(b))  # generates 'B2'
    
    print( "Session 2")
    with tf.Session() as sess2:
      print (sess2.run(a))  # generates 'A3'
      print (sess2.run(a))  # generates 'A4'
      print (sess2.run(b))  # generates 'B3'
      print (sess2.run(b))  # generates 'B4'

    明显可以看出,跨Session生成的所有序列都是重复的,但是在档额Session里是不同的,这就是graph-level的随机生成种子。这tf.set_random_seed(interger)  中不同的interger没有什么不同,只是相同的interger每次生成的序列是固定的。

  • 相关阅读:
    Java基础(二十三)——IO流
    Java基础(二十二) 递归
    Java基础(二十二) Lambda表达式和File类
    Java基础(二十一)——多线程和Lambda表达式
    Java基础(二十)——多线程
    Java基础(十八)——Comparator比较器、Comparable接口和Map集合
    根据 key值查找数组对象中所有的符合的对象 (递归)
    超级好用的 支付宝小程序 网络请求封装 async/await
    关于Vue Loading chunk {n} failed的问题
    支付宝小程序iconfont兼容性问题
  • 原文地址:https://www.cnblogs.com/happy-sir/p/11530528.html
Copyright © 2011-2022 走看看