如何在TensorFlow中实现递归神经网络?

时间:2016-05-05 15:13:37

标签: python c++ neural-network tensorflow

有没有办法使用TensorFlow实现像[Socher et al. 2011]中的递归神经网络? 请注意,这与TensorFlow很好地支持的递归神经网络不同。 不同之处在于网络不会复制到线性操作序列中,而是复制到树结构中。

我想我可以使用While op为我的数据集的每个条目构建类似于树数据结构的广度优先遍历。

也许可以在TensorFlow中将树遍历实现为新的C ++ op,类似于While(但更通用)?

2 个答案:

答案 0 :(得分:6)

您的猜测是正确的,您可以使用tf.while_looptf.cond来表示静态图中的树结构。更多信息: https://github.com/bogatyy/cs224d/tree/master/assignment3

在我的评估中,与为每棵新树重新构建图表相比,它使培训速度提高了16倍。

答案 1 :(得分:5)

目前,这些模型很难在TensorFlow中高效,干净地实现,因为图形结构取决于输入。这也使得进行小型化非常困难。可以使用你提到的while循环之类的东西,但干净利落并不容易。

您可以为每个示例构建一个新图表,但这会非常烦人。如果对于给定的输入大小,您可以枚举相当少量的可能图形,您可以在它们之间进行选择并一次构建它们,但对于较大的输入,这是不可能的。

您还可以使用复杂的tf.gather逻辑和蒙版在示例中路由示例,但这也是一个巨大的痛苦。

最终,为每个示例动态构建图表可能是最简单的,并且将来有可能会有更多支持更好的即时样式执行的替代方案。但是从v0.8开始,我认为这有点烦人,并且在雅罗斯拉夫的评论中提到了一些开销。

编辑:自从我回答以来,这是一个使用带有while循环的静态图的示例:https://github.com/bogatyy/cs224d/tree/master/assignment3 我不确定它与这样的模型的自定义C ++代码相比有多高效,尽管原则上它可以进行批处理。