在多个线程中重用 Tensorflow 会话会导致崩溃

2024-04-05

背景:

我有一些复杂的强化学习算法,我想在多个线程中运行。

Problem

当尝试打电话时sess.run在一个线程中我收到以下错误消息:

RuntimeError: The Session graph is empty. Add operations to the graph before calling run().

重现错误的代码:

import tensorflow as tf

import threading

def thread_function(sess, i):
    inn = [1.3, 4.5]
    A = tf.placeholder(dtype=float, shape=(None), name="input")
    P = tf.Print(A, [A])
    Q = tf.add(A, P)
    sess.run(Q, feed_dict={A: inn})

def main(sess):

    thread_list = []
    for i in range(0, 4):
        t = threading.Thread(target=thread_function, args=(sess, i))
        thread_list.append(t)
        t.start()

    for t in thread_list:
        t.join()

if __name__ == '__main__':

    sess = tf.Session()
    main(sess)

如果我在线程外运行相同的代码,它将正常工作。

有人可以深入了解如何在 python 线程中正确使用 Tensorflow 会话吗?


Session不仅可以是当前线程的默认值,还可以是图。 当您进入会话并调用时run在其上,默认图表将是不同的。

您可以修改您的线程函数像这样让它工作:

def thread_function(sess, i):
    with sess.graph.as_default():
        inn = [1.3, 4.5]
        A = tf.placeholder(dtype=float, shape=(None), name="input")
        P = tf.Print(A, [A])
        Q = tf.add(A, P)
        sess.run(Q, feed_dict={A: inn})

但是,我不希望有任何显着的加速。 Python 线程与其他语言中的含义不同,只有某些操作(例如 io)会并行运行。对于 CPU 密集型操作来说,它不是很有用。多处理可以真正并行运行代码,但您不会共享同一个会话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个线程中重用 Tensorflow 会话会导致崩溃 的相关文章

随机推荐

  • 如何在 Octave 中永久加载包?

    我在 Windows vista 上使用 Octave 我在代码中使用 4 个包 但是每次我重新启动八度音程时 我都必须从命令行手动加载 pkg load 有没有办法永久加载它们 以便每当 Octave 启动时它都会在其路径中找到它们 当
  • 如何在 mongo 中不区分大小写地索引用户名?

    我正在编写一个网络服务 用户可以选择一个不区分大小写的唯一用户名 不过 我想允许他们使用区分大小写的用户名版本 在插入时检查用户名没有不区分大小写的重复项的最佳方法是什么 我目前看到有两种方法可以做到这一点 存储小写版本和用户输入大小写的另
  • 使用 Google Maps API 配置热图叠加层

    我正在尝试使用 Google Maps API 生成位置热图 它可以工作 但结果不是很有用 因为热图渲染的部分很小很难看到 文档中没有任何内容建议扩展热图以呈现更大的斑点的方法 是否有一种未记录的方法可以做到这一点 或者这只是 API 的限
  • 解码 OAEP 填充时出错

    使用解密文本时RSACryptoServiceProvider Decrypt 我收到错误 解码 OAEP 填充时出错 这是我的代码 CspParameters cspParam new CspParameters cspParam new
  • 如何在不按 F5 的情况下使缓存图像过期?

    我正在使用 MVC4 和 C 制作一个 Web 应用程序 我允许用户上传他们的个人资料图片 此时 我需要之前的个人资料图片过期 以便当浏览器重新加载页面时显示新图像 目前 由于两个图像共享相同的名称 因此浏览器使用已缓存的先前图像而不是新图
  • 单击 iframe 中的链接根本没有任何效果

    在 Google Chrome 中 我注意到点击一些链接似乎根本没有效果 a href http google com clicking this link does nothing at all a 这里有一个JSBin http jsb
  • 避免在重建期间删除当前的 Lucene.NET 索引

    我是 Lucene NET 的新手 但我正在使用一个开源工具 http trac sitecore net AdvancedDatabaseCrawler 为Sitecore CMS http www sitecore net它使用 Luc
  • Robot Framework:在实际变量中包含竖线(|)字符而不是作为分隔符的方法?

    我通过文本格式使用 Robot Framework 和 robot 文件设置 我一直在寻找一种包含管道字符的方法 变量中每一侧都有一个空格 以便变量中的内容可读 而不会导致 Robot Framework 将其视为分隔符 问题在于 Robo
  • 如何从另一个 Grails 插件配置 Grails 插件

    我正在尝试编写一个可以在多个 Grails 应用程序中重用的插件 该插件基本上应该是一个包装器弹簧安全核心 http grails org plugin spring security core和 LDAP 插件 这意味着它应该包含 用户
  • 运行时的“v2.0.50727”,如果没有附加配置信息,则无法在 4.0 运行时中加载[重复]

    这个问题在这里已经有答案了 我正在将 vcproj 从 VS2005 转换为 VS2010 但转换后出现以下错误 附加信息 混合模式程序集是针对运行时版本 v2 0 50727 构建的 如果没有附加配置信息 则无法在 4 0 运行时中加载
  • 耳朵图像处理 - 在 MATLAB 中查找直线和曲线的交点

    1 https i stack imgur com j3ZRQ jpg我有一只耳朵的 Canny 边缘输出 我用一条线 绿色 连接了最远的两个边界 现在我想从这条线的中点到外边界 左侧 绘制一条法线 我编写的代码帮助我绘制法线 但我希望红线
  • mysql NOW() 返回错误值,而全局时区设置为 +00:00

    两周以来 我对时区问题感到困惑 在我的本地主机上一切正常 但它在专用服务器上返回错误的值 让我说说到目前为止我做了什么 首先通过以下查询设置全局时区 本地主机和服务器上的超级权限 SET GLOBAL time zone 00 00 现在运
  • 如何访问权限允许管理android studio中的所有文件

    在 Android 10 和 11 SDK 30 中 如何访问Android设备中的所有文件并授予允许管理所有文件的权限 我已经尝试过requestLegacyExternalStorage defaultToDeviceProtected
  • 将 java 对象/类从一个类加载器复制到另一个类加载器

    您好 有没有一种方法可以将一个类加载上下文 属性等 从一个类加载器 例如 制作 类点 复制到另一个类加载器 明确表示 例子 我在 CL 1 上有一个对象点 现在在另一个 CL2 上运行 我想在 CL 3 中创建这个对象 一些对象 class
  • 设置 dplyr 链内列的格式

    我有这个数据集 dat lt structure list date structure c 1L 1L 1L 2L 2L 2L 3L 3L 3L 4L 4L Label c 3 31 2014 4 1 2014 4 2 2014 4 3
  • 如何让Android KitKat用户不下载应用程序?

    我在Android 中开发了一个应用程序 它适用于除 KitKat 用户之外的所有用户 当我在 Play 商店上传此应用程序时 我希望 KitKat 用户无法下载此应用程序 即使当我在系统中执行此应用程序时 它也会检测 KitKat 手机
  • 在java中创建自定义对象数组

    我有 100 条数据记录 这些数据是从服务传入我的系统的 我想为每条记录创建 100 个类对象 以便将其序列化为我的自定义类 我在 for 循环内进行内存创建 如下所示 for int i 0 i lt 100 i SomeClass s1
  • 将 HTML 文件解析为 PHP

    这是将 html 文件解析为 php 的正确方法吗 RemoveHandler html htm AddType application x httpd php php htm html 保存在根文件夹中的 htaccess 文件中吗 我添
  • NSApplication windows 属性 - windows 未删除?

    我有一个显示模式的 NSWindow Controller 它有一个 关闭 按钮 连接到如下操作 IBAction close id sender self window orderOut sender self window close
  • 在多个线程中重用 Tensorflow 会话会导致崩溃

    背景 我有一些复杂的强化学习算法 我想在多个线程中运行 Problem 当尝试打电话时sess run在一个线程中我收到以下错误消息 RuntimeError The Session graph is empty Add operation