【问题标题】:How to choose a RNN cell from a list of RNN cells during runtime in TensorFlow如何在 TensorFlow 运行时从 RNN 单元列表中选择一个 RNN 单元
【发布时间】:2018-04-11 01:40:12
【问题描述】:

我的网络需要多个独立的MultiRNNCells,现在存储为python列表multirnn_cells。在运行时,基于标量占位符i 的值,我需要逐步执行相应的RNN 单元multirnn_cells[i]。我该怎么做?

我在 TensorFlow 控制流文档中注意到 tf.case。这不合适,因为 tf.case 期望元组函数返回张量而不是其他任何东西。

【问题讨论】:

    标签: tensorflow machine-learning deep-learning recurrent-neural-network control-flow


    【解决方案1】:

    我不确定这是否可能,但即使是,这也将是一个非常肮脏的黑客行为。出于多种原因:

    • Tensorflow 旨在运行在非常特定的环境中,例如 GPU 内存。因此,runtime 只能使用数值和一些预定义的原始类型(例如字符串)进行操作。它不能与任意 python 对象一起使用,每个 MultiRNNCell 实例都是,这就是 API 强制您将张量作为输入传递并返回张量作为输出的原因。

    • 张量流中的任何 RNN 单元,尤其是 MultiRNNCell,都是 工厂。它只是封装了在图中创建单元格的方式,通常在构建图后就没用了。如果您想在运行时使用它,即在运行时创建新单元格并展开图形,这是 OOM 错误的快速路径。如果您打算使用已经实例化的 RNN 层,则这些是普通张量,而不是 MultiRNNCell 单元。

    底线:我强烈建议您反对所描述的方法。

    【讨论】:

    • 我明白了。但是你对我应该如何解决这个问题有什么建议吗?我需要能够在运行时根据输入占位符在 RNN 参数之间进行选择。除了自己编写自定义 RNN 单元之外,我不知道如何做到这一点。
    • 自定义 RNN 单元是更好的解决方案
    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多