首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中的sess.run

循环中的sess.run
EN

Stack Overflow用户
提问于 2019-02-05 04:52:37
回答 1查看 234关注 0票数 0

我有一个基于输入张量计算一系列操作的图。此输入张量将从网络摄像头导出。在这种情况下,我可以在while循环中使用sess.run(...)

然而,这是最优的吗?在while循环的每次迭代中,图形中的张量(即权重)是否保存在GPU的内存中?我读到GPU计算最昂贵的部分是将张量从RAM迁移到GPU内存。这种迁移是在我每次调用sess.run(...)时都会发生,还是只会发生一次,并且我可以随心所欲地运行sess.run(...)?那么我猜想当sess.close()被调用时,张量会从图形处理器中释放出来?

EN

回答 1

Stack Overflow用户

发布于 2019-02-05 04:58:02

每次执行sess.run(...)时,都会发生迁移。然而,我非常确定可以做些事情来加速这一进程。我知道你可以使用opencv的gpu版本。此外,您还可以使用opencv访问网络摄像头。

然而,我也读到这将需要迁移的所有时间,有时它可能会比在cpu上执行一切更慢。

我能想到的另一件事是减少你从相机读取的图像数量。使用opencv,您可以指定每秒读取的帧数。如果你问我,将计算保留在cpu上,并且只从摄像头中读取少量的帧应该是你得到的最好的选择。

下面是实现这一点的代码补丁(我知道这超出了问题的范围,但我希望它对您有用):

代码语言:javascript
复制
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, num_of_frames_per_second)
model = YourModel()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    while True:
        ret, frame = cap.read()
        prediction = sess.run(..., frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
        sleep(1)

这样,您将每秒读取一帧,并使用该帧作为输入执行推理。

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

https://stackoverflow.com/questions/54524148

复制
相关文章

相似问题

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