|
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