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

How can I implement a recursive neural network in TensorFlow?

本文关键字:实现 递归 神经网络 TensorFlow      更新时间:2023-10-16

是否有某种方法可以使用TensorFlow实现类似[Socher等人2011]中的递归神经网络?请注意,这与TensorFlow很好地支持的递归神经网络不同。不同之处在于,网络不是复制成线性操作序列,而是复制成树结构。

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

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

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

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

目前,这些模型很难在TensorFlow中高效、干净地实现,因为图的结构取决于输入。这也使得进行迷你观看变得非常困难。使用像您提到的while循环这样的东西是可能的,但要做到干净并不容易。

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

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

最终,为每个示例动态构建图形可能是最简单的,而且将来可能会有其他选择来支持更好的即时样式执行。但从v0.8开始,我预计这会有点烦人,并会像雅罗斯拉夫在评论中提到的那样引入一些开销。

编辑:既然我回答了,下面是一个使用while循环的静态图的例子:https://github.com/bogatyy/cs224d/tree/master/assignment3我不确定它与像这样的模型的自定义C++代码相比有多高的性能,尽管原则上它可以是批处理的。