【问题标题】:Reusing compiled Theano functions重用已编译的 Theano 函数
【发布时间】:2015-11-12 07:05:18
【问题描述】:

假设我在 Theano 中实现了以下功能:

import theano.tensor as T
from theano import function
x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function([x, y], z)

当我尝试运行它时,会构建一个计算图,该函数会得到优化和编译。

如何在 Python 脚本和/或 C++ 应用程序中重用这段已编译的代码块?

编辑: 目标是构建一个深度学习网络并在最终的 C++ 应用程序中重用它。

【问题讨论】:

  • 我遇到了同样的问题。你找到解决办法了吗?
  • Theano 似乎缓存了优化结果,因此任何后续调用都应该很快。尽管如此,在例如之后工作站重新启动,您必须再次进行优化。酸洗解决了这个问题。编译 Theano 函数对象后,您可以对其进行腌制,然后在需要时加载。
  • 但是我可以从 C/C++ 代码中调用 pickled 函数吗?
  • 您可以尝试使用Boost.Python pickle interface 加载它,但我不确定您是否可以在没有python 的情况下使用它。正如@nouiz 在下面指出的那样,您始终可以从 C++ 中调用 python 代码并从那里使用腌制对象。
  • 谢谢!我一定会试一试的。

标签: c++ python-2.7 theano


【解决方案1】:

目前这是不可能的。有用户修改了 Theano 以允许对 Theano 函数进行酸洗,但在 unpickling 期间我们已经重新优化了图形。

有一个 Pull Request 允许 Theano 生成 C++ 库。然后用户可以自己编译它并将其用作普通的 C++ 库。该 lib 链接到 python lib,并且需要安装 numpy。但这还没有准备好广泛使用。

你的目标是什么?为了节省编译时间?如果是这样Theano已经缓存了它编译的c++模块,那么下次重用时,编译会更快。但是对于一个大图,优化阶段总是如上所述重做,这可能需要很长时间。

那么你的目标是什么?

这是我们正在努力的事情。确保使用最新的 Theano 版本 (0.6),因为它编译得更快。开发版也快一点。

【讨论】:

  • 我已将目标添加到原始问题中。估计我暂时只能用lua了。
  • 您可以从 C++ 调用 python 代码。这将允许你做你想做的事。但它要求安装 python、NumPy 和 Theano。不适合重新分配,但如果您控制环境,它可以工作。
  • 你能发个公关链接吗?
  • 以下是一些注释的问题:github.com/Theano/Theano/issues/1408。没有明确的指示。如果您有任何问题,您将在 theano-dev 邮件列表中获得更快的答复。
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多