我想训练一次贝叶斯模型,然后在有新数据可用时更新模型。
可能有一个特定的名称(顺序培训?批量培训?),但我不知道。
以下是我想做的玩具代码:
import numpy as np
import pymc3 as pm
import theano
import theano.tensor as tt
# Very simple observed data (only 100s)
data = np.array([100] * 20)
# Very basic model
model = pm.Model()
with model:
mu = pm.Normal('mu', mu=10, sd=10)
sigma = pm.HalfNormal('sigma', sd=1)
Y_obs = pm.Normal('Y', mu, sigma, observed=data)
trace = pm.sample(500, tune=1000, target_accept=0.9)
print(trace['mu'][-10:])
# Now I would like to continue training my model using a new batch of data
new_data = np.array([200] * 20)
with model:
Y_obs = pm.Normal('Y', mu, sigma, observed=new_data)
trace = pm.sample(500, tune=1000, target_accept=0.9)
结果是,在对第一批数据进行训练之后(如预期的那样),我得到了一个以100为中心的亩分布。
当我尝试使用第二批数据重新训练模型时,出现错误: “变量名称Y已经存在”
我希望我想做的很清楚,如果不是,请告诉我。