为了账号安全,请及时绑定邮箱和手机立即绑定

错误:非常量表达式无法从类型'npy_intp'缩小为'int'

错误:非常量表达式无法从类型'npy_intp'缩小为'int'

千万里不及你 2021-04-08 14:15:37
我正在尝试运行以下模型,但在编译过程中将失败:import numpy as npimport pymc3 as pmdef sample_data(G=1, K=2):    # mean proportion ([0,1]) for each g    p_g = np.random.beta(2, 2, size=G)    # concentration around each p_g    c_g = np.random.lognormal(mean=0.5, sigma=1, size=G)    # reparameterization for standard Beta(a,b)    a_g = c_g * p_g / np.sqrt(p_g**2 + (1.-p_g)**2)    b_g = c_g*(1.-p_g) / np.sqrt(p_g**2 + (1.-p_g)**2)    # for each p_g, sample K proportions    p_gk = np.random.beta(a_g[:, np.newaxis], b_g[:, np.newaxis], size=(G, K))    return p_gk# Data sizeG = 3K = 5# obtain a G x K array of proportions p_gk in [0,1]data = sample_data(G, K) with pm.Model() as m:    # Parameters    p_g = pm.Beta('p_g', 1., 1., shape=G)    sd_g = pm.HalfNormal('sd_g', sd=1., shape=G)    # Observed proportions    p_gk = pm.Beta('p_gk', mu=p_g, sd=sd_g, shape=(G, K), observed=data)    trace = pm.sample(2000)我是PyMC3的新手。运行现有的PyMC3示例时,我看不到这些错误。我怀疑看到这些是因为我使用的是多维格式(即(G,K)),因为我还没有看到其他人使用此格式(我可能是对Stan熟悉)。通常,我很难理解如何实现具有多个维度的多级模型。知道是什么原因导致了我所看到的错误吗?
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

一种解决方法是抑制编译错误:


import theano


theano.config.gcc.cxxflags = "-Wno-c++11-narrowing"

这些错误对程序正确性的影响程度尚不清楚。当我在CentOS 7上编译时,它们不会出现(即使使用显式地检查它们-Wc++11-narrowing)。在Mac OS X上具有抑制错误的采样结果与在CentOS上没有采样结果是可比的。


我还是希望看到一个可以解释根本问题的答案。


查看完整回答
反对 回复 2021-04-27
?
跃然一笑

TA贡献1826条经验 获得超6个赞

是的-您必须对更高尺寸的形状更加明确。该库确实有点“聪明”,但是如果您提供shape参数,它将使用该参数。


您的示例在语法上通过设置固定


with pm.Model() as m:


    # Parameters

    p_g = pm.Beta('p_g', 1., 1., shape=(G, 1))

    sd_g = pm.HalfNormal('sd_g', sd=1, shape=(G, 1))


    # Observed proportions

    p_gk = pm.Beta('p_gk', mu=p_g.dot(np.ones((1,K))), sd=sd_g.dot(np.ones((1, K))), shape=(G, K), observed=data)

    trace = pm.sample()

注意,运行将m.check_test_point()显示p_gk具有0的概率。这是因为sd_g太宽了,PyMC3尝试将其初始化为0.8,这超出了mu, sd参数化beta分布的支持。


设置还sd_g = pm.HalfNormal('sd_g', sd=0.1, shape=(G, 1))允许您从模型中采样,尽管这可能不是您想要的!


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信