2 回答

TA貢獻1779條經驗 獲得超6個贊
一種解決方法是抑制編譯錯誤:
import theano
theano.config.gcc.cxxflags = "-Wno-c++11-narrowing"
這些錯誤對程序正確性的影響程度尚不清楚。當我在CentOS 7上編譯時,它們不會出現(即使使用顯式地檢查它們-Wc++11-narrowing)。在Mac OS X上具有抑制錯誤的采樣結果與在CentOS上沒有采樣結果是可比的。
我還是希望看到一個可以解釋根本問題的答案。

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))允許您從模型中采樣,盡管這可能不是您想要的!
添加回答
舉報