如何在单个会话中从相同的随机操作中获得不同的样本



我正试图通过堆叠xr op从xr获取多个样本。现在,它似乎只是给了您相同的值。有没有一种方法可以在单个会话中获得不同的值或xr

import tensorflow as tf
import tensorflow.random as tdr 
import numpy as np
x = 5. # fixe_input 
xr = tdr.uniform(shape=[1],minval=0., maxval=x)
x_list = tf.stack([xr for _ in range(10)]
with tf.Session() as sess:
print('xlist', sess.run(x_list))

输出:

xlist [[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]
[2.2005057]]

有没有办法在单个会话中获得不同的值或xr?

否,每个节点评估一次。相反,为什么不将shape=[1]更改为shape=[10]呢?这将通过一个sess.run调用为您提供一个由分布中的10个样本组成的数组。

import tensorflow as tf
import tensorflow.random as tdr 
import numpy as np
x = 5. # fixe_input 
xr = tdr.uniform(shape=[10],minval=0., maxval=x)
with tf.Session() as sess:
print('xlist', sess.run(xr))

xlist[2.6705563 1.477465 2.2741747 0.44075608 0.41182756 3.6527942.3826408 4.6979356 2.0650215 1.4842021]

您基本上只生成一次随机数,在变量中捕获它,然后像下面的第一部分中那样复制它。您希望为列表中的每个项目调用随机函数,如下面的第二部分所示。

In [2]: from random import randint                                              
In [3]: x = randint(1,1000)                                                     
In [4]: random_nums = [x for _ in range(10)]                                    
In [5]: random_nums                                                             
Out[5]: [728, 728, 728, 728, 728, 728, 728, 728, 728, 728]
In [6]: random_nums2 = [randint(1, 1000) for _ in range(10)]                    
In [7]: random_nums2                                                            
Out[7]: [92, 928, 72, 875, 719, 725, 957, 930, 729, 299]
In [8]: 

最新更新