PyMC:切换随机变量观察标志

时间:2014-06-06 13:34:18

标签: pymc

在我的测试集上,每个数据点的观察变量都不相同。可以在数据点上观察给定变量,而不是在下一个变量上观察。因此,我想在不重建完整PyMC模型的情况下更改这些变量的观察标志。我读到这是不可能的(而且无法做到)。有没有办法做到这一点?

因此我决定为每个测试集数据点重建一个PyMC模型。我在for循环的每次迭代中实例化一个新的PyMC模型。

问题是似乎不删除每个PyMC模型使用的内存。事实是我的网络很大(1000个二项式/ sigmoid节点)并且密集连接。该模型大约需要200MB(只是模型,没有痕迹)。我想知道是否python垃圾收集器无法删除它,因为我网络的PyMC节点之间存在大量循环引用。

你怎么看?你看到了做这种事的正确方法吗?

1 个答案:

答案 0 :(得分:1)

如果要为每个数据点重建PyMC模型,那么可能您没有使用内置采样器(例如MCMC)。在这种情况下,您可以使用每次迭代时需要设置的节点的set_value()方法,然后调用model.draw_from_prior()以获取其他节点的随机值。

换句话说,您可以使用observed=True创建节点,而不是使用observed=False,然后使用set_value()手动修复该值。