mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-06-05 14:55:15 +02:00
psistattests update
This commit is contained in:
parent
4948fb1345
commit
76bfbee545
3 changed files with 51 additions and 32 deletions
|
|
@ -412,6 +412,9 @@ class kern(Parameterized):
|
||||||
[p.dpsi0_dtheta(dL_dpsi0, Z[:, i_s], mu[:, i_s], S[:, i_s], target[ps]) for p, ps, i_s in zip(self.parts, self.param_slices, self.input_slices)]
|
[p.dpsi0_dtheta(dL_dpsi0, Z[:, i_s], mu[:, i_s], S[:, i_s], target[ps]) for p, ps, i_s in zip(self.parts, self.param_slices, self.input_slices)]
|
||||||
return self._transform_gradients(target)
|
return self._transform_gradients(target)
|
||||||
|
|
||||||
|
def dpsi0_dZ(self, dL_dpsi0, Z, mu, S):
|
||||||
|
return np.zeros_like(Z)
|
||||||
|
|
||||||
def dpsi0_dmuS(self, dL_dpsi0, Z, mu, S):
|
def dpsi0_dmuS(self, dL_dpsi0, Z, mu, S):
|
||||||
target_mu, target_S = np.zeros_like(mu), np.zeros_like(S)
|
target_mu, target_S = np.zeros_like(mu), np.zeros_like(S)
|
||||||
[p.dpsi0_dmuS(dL_dpsi0, Z[:, i_s], mu[:, i_s], S[:, i_s], target_mu[:, i_s], target_S[:, i_s]) for p, i_s in zip(self.parts, self.input_slices)]
|
[p.dpsi0_dmuS(dL_dpsi0, Z[:, i_s], mu[:, i_s], S[:, i_s], target_mu[:, i_s], target_S[:, i_s]) for p, i_s in zip(self.parts, self.input_slices)]
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ def ard(p):
|
||||||
class Test(unittest.TestCase):
|
class Test(unittest.TestCase):
|
||||||
input_dim = 9
|
input_dim = 9
|
||||||
num_inducing = 13
|
num_inducing = 13
|
||||||
N = 30
|
N = 300
|
||||||
Nsamples = 9e6
|
Nsamples = 1e6
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
i_s_dim_list = [2,4,3]
|
i_s_dim_list = [2,4,3]
|
||||||
|
|
@ -50,20 +50,20 @@ class Test(unittest.TestCase):
|
||||||
# GPy.kern.linear(self.input_dim, ARD=True) +
|
# GPy.kern.linear(self.input_dim, ARD=True) +
|
||||||
# GPy.kern.bias(self.input_dim) +
|
# GPy.kern.bias(self.input_dim) +
|
||||||
# GPy.kern.white(self.input_dim)),
|
# GPy.kern.white(self.input_dim)),
|
||||||
# (GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True) +
|
(#GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
||||||
(GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
GPy.kern.linear(self.input_dim, np.random.rand(self.input_dim), ARD=True)
|
||||||
+GPy.kern.linear(self.input_dim, np.random.rand(self.input_dim), ARD=True)
|
+GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
||||||
# GPy.kern.bias(self.input_dim) +
|
# +GPy.kern.bias(self.input_dim)
|
||||||
# GPy.kern.white(self.input_dim)),
|
# +GPy.kern.white(self.input_dim)),
|
||||||
),
|
),
|
||||||
(GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
# (GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True) +
|
||||||
+GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
# GPy.kern.bias(self.input_dim, np.random.rand())),
|
||||||
#+GPy.kern.bias(self.input_dim, np.random.rand())
|
# (GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
||||||
#+GPy.kern.white(self.input_dim, np.random.rand())),
|
# +GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True)
|
||||||
),
|
# #+GPy.kern.bias(self.input_dim, np.random.rand())
|
||||||
(GPy.kern.rbf(self.input_dim, np.random.rand(), np.random.rand(self.input_dim), ARD=True) +
|
# #+GPy.kern.white(self.input_dim, np.random.rand())),
|
||||||
GPy.kern.bias(self.input_dim, np.random.rand()) +
|
# ),
|
||||||
GPy.kern.white(self.input_dim, np.random.rand())),
|
# GPy.kern.white(self.input_dim, np.random.rand())),
|
||||||
# GPy.kern.rbf(self.input_dim), GPy.kern.rbf(self.input_dim, ARD=True),
|
# GPy.kern.rbf(self.input_dim), GPy.kern.rbf(self.input_dim, ARD=True),
|
||||||
# GPy.kern.linear(self.input_dim, ARD=False), GPy.kern.linear(self.input_dim, ARD=True),
|
# GPy.kern.linear(self.input_dim, ARD=False), GPy.kern.linear(self.input_dim, ARD=True),
|
||||||
# GPy.kern.linear(self.input_dim) + GPy.kern.bias(self.input_dim),
|
# GPy.kern.linear(self.input_dim) + GPy.kern.bias(self.input_dim),
|
||||||
|
|
@ -120,25 +120,25 @@ class Test(unittest.TestCase):
|
||||||
diffs = []
|
diffs = []
|
||||||
for i, q_x_sample_stripe in enumerate(np.array_split(self.q_x_samples, self.Nsamples / Nsamples)):
|
for i, q_x_sample_stripe in enumerate(np.array_split(self.q_x_samples, self.Nsamples / Nsamples)):
|
||||||
K = kern.K(q_x_sample_stripe, self.Z)
|
K = kern.K(q_x_sample_stripe, self.Z)
|
||||||
K = (K[:, :, None] * K[:, None, :]).mean(0)
|
K = (K[:, :, None] * K[:, None, :])
|
||||||
K_ += K
|
K_ += K.sum(0) / self.Nsamples
|
||||||
diffs.append(((psi2 - (K_ / (i + 1)))**2).mean())
|
diffs.append(((psi2 - (K_*self.Nsamples/((i+1)*Nsamples)))**2).mean())
|
||||||
K_ /= self.Nsamples / Nsamples
|
#K_ /= self.Nsamples / Nsamples
|
||||||
msg = "psi2: {}".format("+".join([p.name + ard(p) for p in kern.parts]))
|
msg = "psi2: {}".format("+".join([p.name + ard(p) for p in kern.parts]))
|
||||||
try:
|
try:
|
||||||
import pylab
|
import pylab
|
||||||
pylab.figure(msg)
|
pylab.figure(msg)
|
||||||
pylab.plot(diffs, marker='x', mew=1.3)
|
pylab.plot(diffs, marker='x', mew=.2)
|
||||||
# print msg, np.allclose(psi2.squeeze(), K_, rtol=1e-1, atol=.1)
|
# print msg, np.allclose(psi2.squeeze(), K_, rtol=1e-1, atol=.1)
|
||||||
self.assertTrue(np.allclose(psi2.squeeze(), K_),
|
self.assertTrue(np.allclose(psi2.squeeze(), K_),
|
||||||
#rtol=1e-1, atol=.1),
|
#rtol=1e-1, atol=.1),
|
||||||
msg=msg + ": not matching")
|
msg=msg + ": not matching")
|
||||||
# sys.stdout.write(".")
|
# sys.stdout.write(".")
|
||||||
except:
|
except:
|
||||||
# import ipdb;ipdb.set_trace()
|
|
||||||
# kern.psi2(self.Z, self.q_x_mean, self.q_x_variance)
|
# kern.psi2(self.Z, self.q_x_mean, self.q_x_variance)
|
||||||
# sys.stdout.write("E")
|
# sys.stdout.write("E")
|
||||||
print msg + ": not matching"
|
print msg + ": not matching"
|
||||||
|
import ipdb;ipdb.set_trace()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -40,10 +40,9 @@ class PsiStatModel(Model):
|
||||||
return self.kern.__getattribute__(self.which)(self.Z, self.X, self.X_variance).sum()
|
return self.kern.__getattribute__(self.which)(self.Z, self.X, self.X_variance).sum()
|
||||||
def _log_likelihood_gradients(self):
|
def _log_likelihood_gradients(self):
|
||||||
psimu, psiS = self.kern.__getattribute__("d" + self.which + "_dmuS")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance)
|
psimu, psiS = self.kern.__getattribute__("d" + self.which + "_dmuS")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance)
|
||||||
try:
|
#psimu, psiS = numpy.ones(self.N * self.input_dim), numpy.ones(self.N * self.input_dim)
|
||||||
psiZ = self.kern.__getattribute__("d" + self.which + "_dZ")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance)
|
psiZ = self.kern.__getattribute__("d" + self.which + "_dZ")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance)
|
||||||
except AttributeError:
|
#psiZ = numpy.ones(self.num_inducing * self.input_dim)
|
||||||
psiZ = numpy.zeros(self.num_inducing * self.input_dim)
|
|
||||||
thetagrad = self.kern.__getattribute__("d" + self.which + "_dtheta")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance).flatten()
|
thetagrad = self.kern.__getattribute__("d" + self.which + "_dtheta")(numpy.ones_like(self.psi_), self.Z, self.X, self.X_variance).flatten()
|
||||||
return numpy.hstack((psimu.flatten(), psiS.flatten(), psiZ.flatten(), thetagrad))
|
return numpy.hstack((psimu.flatten(), psiS.flatten(), psiZ.flatten(), thetagrad))
|
||||||
|
|
||||||
|
|
@ -116,9 +115,9 @@ if __name__ == "__main__":
|
||||||
# m.randomize()
|
# m.randomize()
|
||||||
# # self.assertTrue(m.checkgrad())
|
# # self.assertTrue(m.checkgrad())
|
||||||
numpy.random.seed(0)
|
numpy.random.seed(0)
|
||||||
input_dim = 5
|
input_dim = 3
|
||||||
N = 50
|
N = 3
|
||||||
num_inducing = 10
|
num_inducing = 2
|
||||||
D = 15
|
D = 15
|
||||||
X = numpy.random.randn(N, input_dim)
|
X = numpy.random.randn(N, input_dim)
|
||||||
X_var = .5 * numpy.ones_like(X) + .1 * numpy.clip(numpy.random.randn(*X.shape), 0, 1)
|
X_var = .5 * numpy.ones_like(X) + .1 * numpy.clip(numpy.random.randn(*X.shape), 0, 1)
|
||||||
|
|
@ -143,10 +142,27 @@ if __name__ == "__main__":
|
||||||
# num_inducing=num_inducing, kernel=kernel)
|
# num_inducing=num_inducing, kernel=kernel)
|
||||||
# m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
# m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
# num_inducing=num_inducing, kernel=GPy.kern.rbf(input_dim))
|
# num_inducing=num_inducing, kernel=GPy.kern.rbf(input_dim))
|
||||||
m3 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
# m3 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
num_inducing=num_inducing, kernel=GPy.kern.linear(input_dim, ARD=True, variances=numpy.random.rand(input_dim)))
|
# num_inducing=num_inducing, kernel=GPy.kern.linear(input_dim, ARD=True, variances=numpy.random.rand(input_dim)))
|
||||||
# + GPy.kern.bias(input_dim))
|
# + GPy.kern.bias(input_dim))
|
||||||
# m4 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
# m = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
# num_inducing=num_inducing, kernel=GPy.kern.rbf(input_dim) + GPy.kern.bias(input_dim))
|
# num_inducing=num_inducing,
|
||||||
|
# kernel=(
|
||||||
|
# GPy.kern.rbf(input_dim, ARD=1)
|
||||||
|
# +GPy.kern.linear(input_dim, ARD=1)
|
||||||
|
# +GPy.kern.bias(input_dim))
|
||||||
|
# )
|
||||||
|
# m.ensure_default_constraints()
|
||||||
|
m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
|
num_inducing=num_inducing, kernel=(
|
||||||
|
GPy.kern.rbf(input_dim, numpy.random.rand(), numpy.random.rand(input_dim), ARD=1)
|
||||||
|
#+GPy.kern.linear(input_dim, numpy.random.rand(input_dim), ARD=1)
|
||||||
|
#+GPy.kern.rbf(input_dim, numpy.random.rand(), numpy.random.rand(input_dim), ARD=1)
|
||||||
|
#+GPy.kern.rbf(input_dim, numpy.random.rand(), numpy.random.rand(), ARD=0)
|
||||||
|
+GPy.kern.bias(input_dim)
|
||||||
|
+GPy.kern.white(input_dim)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
m2.ensure_default_constraints()
|
||||||
else:
|
else:
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue