|
26 | 26 | from pymc.gp.util import (
|
27 | 27 | cholesky,
|
28 | 28 | conditioned_vars,
|
29 |
| - infer_shape, |
| 29 | + infer_size, |
30 | 30 | replace_with_value,
|
31 | 31 | solve_lower,
|
32 | 32 | solve_upper,
|
@@ -129,12 +129,13 @@ def __init__(self, *, mean_func=Zero(), cov_func=Constant(0.0)):
|
129 | 129 | def _build_prior(self, name, X, reparameterize=True, **kwargs):
|
130 | 130 | mu = self.mean_func(X)
|
131 | 131 | cov = stabilize(self.cov_func(X))
|
132 |
| - shape = infer_shape(X, kwargs.pop("shape", None)) |
133 | 132 | if reparameterize:
|
134 |
| - v = pm.Normal(name + "_rotated_", mu=0.0, sigma=1.0, size=shape, **kwargs) |
| 133 | + size = infer_size(X, kwargs.pop("size", None)) |
| 134 | + print("_build_prior:size", size) |
| 135 | + v = pm.Normal(name + "_rotated_", mu=0.0, sigma=1.0, size=size, **kwargs) |
135 | 136 | f = pm.Deterministic(name, mu + cholesky(cov).dot(v))
|
136 | 137 | else:
|
137 |
| - f = pm.MvNormal(name, mu=mu, cov=cov, size=shape, **kwargs) |
| 138 | + f = pm.MvNormal(name, mu=mu, cov=cov, **kwargs) |
138 | 139 | return f
|
139 | 140 |
|
140 | 141 | def prior(self, name, X, reparameterize=True, **kwargs):
|
@@ -269,13 +270,12 @@ def __add__(self, other):
|
269 | 270 | def _build_prior(self, name, X, reparameterize=True, **kwargs):
|
270 | 271 | mu = self.mean_func(X)
|
271 | 272 | cov = stabilize(self.cov_func(X))
|
272 |
| - shape = infer_shape(X, kwargs.pop("shape", None)) |
273 | 273 | if reparameterize:
|
274 |
| - chi2 = pm.ChiSquared(name + "_chi2_", self.nu) |
275 |
| - v = pm.Normal(name + "_rotated_", mu=0.0, sigma=1.0, size=shape, **kwargs) |
276 |
| - f = pm.Deterministic(name, (at.sqrt(self.nu) / chi2) * (mu + cholesky(cov).dot(v))) |
| 274 | + size = infer_size(X, kwargs.pop("size", None)) |
| 275 | + v = pm.StudentT(name + "_rotated_", mu=0.0, sigma=1.0, nu=self.nu, size=size, **kwargs) |
| 276 | + f = pm.Deterministic(name, mu + cholesky(cov).dot(v)) |
277 | 277 | else:
|
278 |
| - f = pm.MvStudentT(name, nu=self.nu, mu=mu, cov=cov, size=shape, **kwargs) |
| 278 | + f = pm.MvStudentT(name, nu=self.nu, mu=mu, cov=cov, **kwargs) |
279 | 279 | return f
|
280 | 280 |
|
281 | 281 | def prior(self, name, X, reparameterize=True, **kwargs):
|
@@ -436,7 +436,7 @@ def marginal_likelihood(self, name, X, y, noise, is_observed=True, **kwargs):
|
436 | 436 | if is_observed:
|
437 | 437 | return pm.MvNormal(name, mu=mu, cov=cov, observed=y, **kwargs)
|
438 | 438 | else:
|
439 |
| - # shape = infer_shape(X, kwargs.pop("shape", None)) |
| 439 | + # size = infer_size(X, kwargs.pop("size", None)) |
440 | 440 | return pm.MvNormal(name, mu=mu, cov=cov, **kwargs)
|
441 | 441 |
|
442 | 442 | def _get_given_vals(self, given):
|
@@ -974,8 +974,8 @@ def conditional(self, name, Xnew, **kwargs):
|
974 | 974 | constructor.
|
975 | 975 | """
|
976 | 976 | mu, cov = self._build_conditional(Xnew)
|
977 |
| - shape = infer_shape(Xnew, kwargs.pop("shape", None)) |
978 |
| - return pm.MvNormal(name, mu=mu, cov=cov, size=shape, **kwargs) |
| 977 | + size = infer_size(Xnew, kwargs.pop("size", None)) |
| 978 | + return pm.MvNormal(name, mu=mu, cov=cov, size=size, **kwargs) |
979 | 979 |
|
980 | 980 |
|
981 | 981 | @conditioned_vars(["Xs", "y", "sigma"])
|
@@ -1098,8 +1098,8 @@ def marginal_likelihood(self, name, Xs, y, sigma, is_observed=True, **kwargs):
|
1098 | 1098 | if is_observed:
|
1099 | 1099 | return pm.KroneckerNormal(name, mu=mu, covs=covs, sigma=sigma, observed=y, **kwargs)
|
1100 | 1100 | else:
|
1101 |
| - shape = np.prod([len(X) for X in Xs]) |
1102 |
| - return pm.KroneckerNormal(name, mu=mu, covs=covs, sigma=sigma, size=shape, **kwargs) |
| 1101 | + size = np.prod([len(X) for X in Xs]) |
| 1102 | + return pm.KroneckerNormal(name, mu=mu, covs=covs, sigma=sigma, size=size, **kwargs) |
1103 | 1103 |
|
1104 | 1104 | def _build_conditional(self, Xnew, pred_noise, diag):
|
1105 | 1105 | Xs, y, sigma = self.Xs, self.y, self.sigma
|
@@ -1175,8 +1175,8 @@ def conditional(self, name, Xnew, pred_noise=False, **kwargs):
|
1175 | 1175 | constructor.
|
1176 | 1176 | """
|
1177 | 1177 | mu, cov = self._build_conditional(Xnew, pred_noise, False)
|
1178 |
| - shape = infer_shape(Xnew, kwargs.pop("shape", None)) |
1179 |
| - return pm.MvNormal(name, mu=mu, cov=cov, size=shape, **kwargs) |
| 1178 | + size = infer_size(Xnew, kwargs.pop("size", None)) |
| 1179 | + return pm.MvNormal(name, mu=mu, cov=cov, size=size, **kwargs) |
1180 | 1180 |
|
1181 | 1181 | def predict(self, Xnew, point=None, diag=False, pred_noise=False):
|
1182 | 1182 | R"""
|
|
0 commit comments