Python 如何在单个会话中从同一个随机op中获取不同的样本

Python 如何在单个会话中从同一个随机op中获取不同的样本,python,tensorflow,keras,Python,Tensorflow,Keras,我试图通过叠加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)]

我试图通过叠加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]]

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

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]: 
是否有一种方法可以在单个会话中获得不同的值或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.652794 2.3826408 4.6979356 2.0650215 1.4842021]


您需要在列表中生成随机数。马上您只是重复变量
xr
保持的同一个值,我得到了该点,但不确定如何@JeffHstandby执行该操作……。我理解此解决方案,但在我的情况下……xr来自分布,如果我在其顶部应用随机操作,则来自xr的样本将不是来自原始分布,而是来自原始分布随机(原始分布)。在上面的例子中,你的随机数不是来自于x的分布,而是来自于应用于x分布的分布。如果我错了,请纠正我“在上面应用随机操作”是什么意思?你认为这是做什么的?我实际上简化了我的问题,我不可能像你提到的那样改变形状。我需要在同一个疗程中多次评估同一个op,但需要不同的样本。