有没有办法使用TensorFlow实现像[Socher et al. 2011]中的递归神经网络? 请注意,这与TensorFlow很好地支持的递归神经网络不同。 不同之处在于网络不会复制到线性操作序列中,而是复制到树结构中。
我想我可以使用While
op为我的数据集的每个条目构建类似于树数据结构的广度优先遍历。
也许可以在TensorFlow中将树遍历实现为新的C ++ op,类似于While
(但更通用)?
答案 0 :(得分:6)
您的猜测是正确的,您可以使用tf.while_loop
和tf.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 ++代码相比有多高效,尽管原则上它可以进行批处理。