image = img.imread("./plots/2021-02-17topo-sort.png")
fig, ax = plt.subplots(figsize=(8, 8))
ax.axis('off')
ax.imshow(image)
plt.show()
Pseudocode
meta_scale ~ Gamma(5.0, 1.0)
loc ~ Normal(0.0, meta_scale)
scale ~ Gamma(meta_scale, meta_scale)
for i = 1,...,N:
data[i] ~ Normal(loc, scale, obs=real_data[i])
end
# graphically
image = img.imread("./plots/2021-02-17meta-scale-model.png")
fig, ax = plt.subplots(figsize=(6, 6))
ax.axis('off')
ax.imshow(image)
plt.show()
# and as actual code (we'll get to how this works soon)
def meta_scale_model(data, size=1, verbose=False):
meta_scale = pyro.sample(
"meta_scale",
dist.Gamma(5.0, 1.0)
)
loc = pyro.sample(
"loc",
dist.Normal(0.0, meta_scale),
)
scale = pyro.sample(
"scale",
dist.Gamma(meta_scale, meta_scale)
)
if verbose:
print(f"meta_scale = {meta_scale}, loc = {loc}, and scale = {scale}")
with pyro.plate("data_plate", size=size):
obs = pyro.sample(
"data",
dist.Normal(loc, scale),
obs=data
)
return obs
# model is fully generative here
seed_me()
mock_data = meta_scale_model(None, size=100, verbose=True)
plot_hist(mock_data)
meta_scale = 11.556055068969727, loc = 7.411444664001465, and scale = 0.814912736415863