如何在TensorFlow中实现递归神经网络
How can I implement a recursive neural network in TensorFlow?
是否有某种方法可以使用TensorFlow实现类似[Socher等人2011]中的递归神经网络?请注意,这与TensorFlow很好地支持的递归神经网络不同。不同之处在于,网络不是复制成线性操作序列,而是复制成树结构。
我想我可以使用While
操作来为数据集的每个条目构建类似于树数据结构的广度优先遍历的东西。
也许可以在TensorFlow中将树遍历作为一种新的C++操作来实现,类似于While
(但更通用)?
您的猜测是正确的,您可以使用tf.while_loop
和tf.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++代码相比有多高的性能,尽管原则上它可以是批处理的。
- 如何在BST的这个简单递归实现中消除警告
- 使用非递归插入方法实现 AVL 树
- C++ 模板使用递归实现循环
- 了解使用堆栈实现队列的递归调用机制
- 在int main()[c++]中实现一个递归函数
- 链表中的递归长度函数实现
- 递归合并排序算法实现
- 我如何实现递归函数的模板,该模板允许C 中的许多不确定数据类型的参数
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 在C++中树的递归实现中少出现1个节点
- 使用递归实现 pow(A, B) % C,其中 A、B 和 C 是正整数
- C++11 递归自旋锁实现
- 在C++中使用OpenMP实现递归函数的并行化
- 如何实现递归"using"/提取模板参数
- 如何在TensorFlow中实现递归神经网络
- 如何在 Windows 上仅使用事件和联锁原语实现递归锁
- 在 C++11 中实现递归代理模式
- 下面使用Map和Vector实现递归级阶遍历的时间复杂度是多少
- 基于Korf 1992的c++实现递归最佳优先搜索的问题