TFP的JointDistributionCoroutineAutoBatched如何给log_prob传入两组观测数据
实现方法
你的JointDistributionCoroutineAutoBatched模型参数顺序和yield变量的先后完全对应,你当前模型的变量输出顺序为:
- 潜变量(共6个):c1 → c2 → s → theta → p → qi
- 观测变量(共2个,按yield先后):k → a
你只需要把两组观测按顺序追加在潜变量参数的末尾传入log_prob即可,假设你已经有观测数据k_data(对应k的观测)和a_data(对应a的观测),两种常用写法如下:
写法1:显式函数定义
def joint_log_prob(*latent_args): # latent_args按顺序对应6个潜变量:c1, c2, s, theta, p, qi return joint.log_prob(*latent_args, k_data, a_data)
如果担心位置传参出错,也可以用关键字参数绑定观测,不需要严格卡顺序:
def joint_log_prob(*latent_args): return joint.log_prob(*latent_args, k=k_data, a=a_data)
写法2:Lambda简写
和你之前单观测的逻辑完全一致,只是把原来的单观测元组替换为两个观测的元组:
joint_log_prob = lambda *x: joint.log_prob(x + (k_data, a_data))
内容的提问来源于stack exchange,提问作者sean00002
相关产品推荐
相关产品推荐

