首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tf.data.Dataset上很慢地循环

在tf.data.Dataset上很慢地循环
EN

Stack Overflow用户
提问于 2020-06-18 15:39:49
回答 1查看 1.3K关注 0票数 2

我想知道为什么tf.data.Dataset样本上的for循环比在相应的numpy数组上循环要慢得多。

代码语言:javascript
复制
import numpy as np
import tensorflow as tf
import time

a = np.ones(100000, dtype=np.float32)

start_time = time.time()
for x in a:
    pass
print(time.time() - start_time)

start_time = time.time()
for x in tf.data.Dataset.from_tensor_slices(a):
    pass
print(time.time() - start_time)
代码语言:javascript
复制
0.05548405647277832
5.67711615562439

我的TensorFlow版本是2.0.0。

EN

回答 1

Stack Overflow用户

发布于 2020-10-15 13:56:24

是的,甚至我也观察到了同样的行为。为了提高速度/性能,尝试将tf.data.dataset封装在@tf.function中,它将花费几乎相同的时间。

AutoGraphtf.function中是默认的,它将您的Python热切的代码转换为与图形兼容的TensorFlow操作。这包括控制流,如ifforwhile

tf.function对TensorFlow操作最有效,NumPy和NumPy调用被转换为常量。

请参阅下面所示的代码,以便在@tf.function中包装

代码语言:javascript
复制
@tf.function

def oper(a):
    start_time = time.time()
    for x in tf.data.Dataset.from_tensor_slices(a):
        pass
    print(time.time() - start_time)

numpytf.data.dataset性能之间显示的完整工作代码

代码语言:javascript
复制
import numpy as np
import tensorflow as tf
import time

a = np.ones(100000, dtype=np.float32)

start_time = time.time()
for x in a:
    pass
print(time.time() - start_time)


@tf.function

def oper(a):
    start_time = time.time()

    for x in tf.data.Dataset.from_tensor_slices(a):
        pass
    print(time.time() - start_time)

oper(a) 

产出:

代码语言:javascript
复制
0.012496232986450195
0.017792224884033203

要了解更多关于tf.function的信息,请参考

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

https://stackoverflow.com/questions/62453823

复制
相关文章

相似问题

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