首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用tensorflow将随机生成的值复制到变量中

无法使用tensorflow将随机生成的值复制到变量中
EN

Stack Overflow用户
提问于 2017-01-25 18:16:14
回答 1查看 91关注 0票数 0

我有一个数组中的数据,大小是1x9,我生成从1到9的随机数,然后对它进行打乱,我想按这个顺序排列数据。

代码语言:javascript
复制
# 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,它应该显示相同的值,而不会再次重新生成。该怎么做呢?

我尝试通过随机导入

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 06:59:48

tf.random_shuffle()操作(通常还有其他tf.random_*()操作)将在每次调用sess.run()时生成新的随机值。如果您希望捕获随机张量的特定值,并在对sess.run()的多个调用中使用它,则应该将其分配给tf.Variable。例如,您可以按如下方式重构您的程序以解决此问题:

代码语言:javascript
复制
# 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]'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41848885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档