我有一个数组中的数据,大小是1x9,我生成从1到9的随机数,然后对它进行打乱,我想按这个顺序排列数据。
# generating an array of number
BCI = tf.concat(0, [tf.fill([1,3],1),tf.fill([1,3],2),tf.fill([1,3],3)])
# making it in to 1x9
BCI1 = tf.reshape(BCI,[-1])
# generating random numbers with length of BCI and shuffling it
rn = tf.random_shuffle(tf.range(tf.shape(BCI1[0]))
rna = tf.cast(rn,tf.int32)
# rearranging data
BCI2 = tf.gather(BCI1,rna)
print(sess.run(BCI1))
print(sess.run(rn))
print(sess.run(BCI2))
# output is
[1 1 1 2 2 2 3 3 3]
[3 5 0 2 6 1 4 8 7]
[2 2 1 3 1 2 1 3 3] # expected to be [2 2 1 1 3 1 2 3 3]这是因为当我每次运行sess.run时,我不能将Rn值复制为常量,每次它都在变化。但是我需要在'rn‘中第一次生成的随机值,因为我需要在另一个上测试。我打印了多少次rn,它应该显示相同的值,而不会再次重新生成。该怎么做呢?
我尝试通过随机导入
n = tf.shape(BCI1)
rna = random.sample(list(range(n[0].eval())),9)但它给了ValueError: Cannot evaluate tensor using eval(): No default session is registered. Use with sess.as_default() or pass an explicit session to eval(session=sess)
发布于 2017-01-26 06:59:48
tf.random_shuffle()操作(通常还有其他tf.random_*()操作)将在每次调用sess.run()时生成新的随机值。如果您希望捕获随机张量的特定值,并在对sess.run()的多个调用中使用它,则应该将其分配给tf.Variable。例如,您可以按如下方式重构您的程序以解决此问题:
# generating an array of number
BCI = tf.constant([1, 1, 1, 2, 2, 2, 3, 3, 3])
# generating random numbers with length of BCI and shuffling it
rn = tf.Variable(tf.random_shuffle(tf.range(9)))
rna = tf.cast(rn,tf.int32)
# rearranging data
BCI2 = tf.gather(BCI1, rna)
sess.run(tf.global_variables_initializer())
print(sess.run(BCI1)) # ==> '[1 1 1 2 2 2 3 3 3]'
print(sess.run(rn)) # ==> '[2 8 3 0 1 4 6 5 7]'
print(sess.run(BCI2)) # ==> '[1 3 2 1 1 2 3 2 3]'
print(sess.run(BCI2)) # ==> '[1 3 2 1 1 2 3 2 3]'https://stackoverflow.com/questions/41848885
复制相似问题