Lif*_*ang 11 neural-network tensorflow
我需要编写一个程序,其中部分TensorFlow节点需要保持存储一些全局信息(主要是变量和摘要),而另一部分需要在程序运行时进行更改/重组.
我现在的方法是在每次迭代中重建整个图形.但是,我必须在每次迭代中从/向检查点文件或numpy数组手动存储和加载这些信息,这使得我的代码非常混乱且容易出错.
我想知道是否有办法删除/修改部分计算图而不是重置整个图?
改变TensorFlow图的结构实际上是不可能的.具体来说,没有一种从图形中删除节点的简洁方法,因此删除子图并添加另一个子图是不切实际的.(我试过这个,它涉及到内部的手术.最终,它的努力比它的价值更多,而且你要求维护头痛.)
有一些解决方法.
你的重建就是其中之一.你似乎对这个方法有很好的处理,所以我不会对它有所帮助,但是为了其他任何偶然发现的人的利益,一个非常类似的方法是图的过滤深度副本.也就是说,您根据某些条件迭代元素并添加它们.如果图形是给你的,那么这是最可行的(即,你没有首先构建它的函数)或者更改是相当小的.您仍然需要为重建图表付出代价,但有时加载和存储可以是透明的.但是考虑到你的情况,这可能不是一个很好的匹配.
另一个选择是将问题重新设置为您尝试评估并依赖数据流行为的所有可能图形的超集.换句话说,构建一个图表,其中包含您提供的每种输入类型,并且只询问您需要的输出.这可能有用的好迹象是:你的网络是参数化的(也许你只是增加/减少宽度或层数),变化很小(可能包括/排除输入),你的操作可以处理变量输入(跨维度的减少,例如).在您的情况下,如果您只有少量有限数量的树结构,这可能会很好.您可能只需要为全局信息添加一些聚合或重新规范化.
第三种选择是将网络视为物理分裂.因此,不考虑具有可变组件的一个网络,而是将固定和变化部分之间的边界视为两个独立网络的输入和输出.这确实使一些事情变得更难:例如,两者之间的反向支持现在很丑陋(听起来这对你来说可能是一个问题).但如果你可以避免这种情况,那么两个网络可以很好地工作.它最终感觉很像处理一个单独的预训练阶段,你很多人已经习惯了.
这些变通方法中的大多数都有相当狭窄的问题,因此它们可能对您的情况没有帮助.也就是说,你不需要全有或全无.如果部分拆分网络或创建超级图只进行一些更改有效,那么您可能只需要担心保存/恢复一些情况,这可能会减轻您的麻烦.
希望这可以帮助!
归档时间: |
|
查看次数: |
5988 次 |
最近记录: |