在我的测试集上,每个数据点的观察变量都不相同。可以在数据点上观察给定变量,而不是在下一个变量上观察。因此,我想在不重建完整PyMC模型的情况下更改这些变量的观察标志。我读到这是不可能的(而且无法做到)。有没有办法做到这一点?
因此我决定为每个测试集数据点重建一个PyMC模型。我在for循环的每次迭代中实例化一个新的PyMC模型。
问题是似乎不删除每个PyMC模型使用的内存。事实是我的网络很大(1000个二项式/ sigmoid节点)并且密集连接。该模型大约需要200MB(只是模型,没有痕迹)。我想知道是否python垃圾收集器无法删除它,因为我网络的PyMC节点之间存在大量循环引用。
你怎么看?你看到了做这种事的正确方法吗?答案 0 :(得分:1)
如果要为每个数据点重建PyMC模型,那么可能您没有使用内置采样器(例如MCMC)。在这种情况下,您可以使用每次迭代时需要设置的节点的set_value()
方法,然后调用model.draw_from_prior()
以获取其他节点的随机值。
换句话说,您可以使用observed=True
创建节点,而不是使用observed=False
,然后使用set_value()
手动修复该值。