首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tf.data.Dataset,地图功能和随机

tf.data.Dataset,地图功能和随机
EN

Stack Overflow用户
提问于 2021-09-08 18:50:50
回答 1查看 538关注 0票数 2

操纵tf.data.Dataset我得到一个行为,我无法理解的起源。我正在操作一个tf.data.Dataset,这是一个简单的整数缓冲区,在这里我想向每个数字中添加一个随机整数(重要的一点)。TF提供了一个映射函数,用于将转换(生成器)应用于数据集的每个元素。如果我编码:

代码语言:javascript
复制
seed(0)
dataset = tf.data.Dataset.from_tensor_slices([1, 1, 1, 1, 1, 1]) 
dataset = dataset.map(lambda x: x + randint(0,9))
print(list(dataset.as_numpy_iterator()))  

此代码将无法按我所需返回。随机生成器只应用一次(返回6),并应用于缓冲区的每个元素。我得到了[7, 7, 7, 7 ,7 ,7 ,7]

但是,如果我编码:

代码语言:javascript
复制
seed(0)
dataset = tf.data.Dataset.from_tensor_slices([1, 1, 1, 1, 1, 1]) 
dataset = dataset.map(lambda x: x + tf.random.uniform([], minval=0, maxval=9, dtype=tf.dtypes.int32, seed=2))
print(list(dataset.as_numpy_iterator()))

返回[7, 8, 1, 9, 1, 4] (我需要的)。我很困惑,为什么第一个版本不能工作,生成器被应用了,但是函数randint(0,9)只执行了一次。有什么建议吗?

谢谢,

蒂莫卡夫

EN

回答 1

Stack Overflow用户

发布于 2022-04-25 00:44:19

在第二种情况下,生成随机整数是图的一部分,因为您使用graph。因此,每次图形运行时,生成随机整数的过程都会重新运行。在第一种情况下,随机整数首先生成,然后参与计算图。所以他们的行为就像常数。这是因为它们不是由tf生成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69108284

复制
相关文章

相似问题

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