mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-06-29 15:59:41 +02:00
resolve conflictions
This commit is contained in:
parent
96901401cc
commit
b9d0ae06b3
2 changed files with 14 additions and 65 deletions
|
|
@ -40,7 +40,7 @@ class GmmNormalPrior(VariationalPrior):
|
||||||
def __init__(self, px_mu, px_var, pi, n_component, variational_pi, name="GMMNormalPrior", **kw):
|
def __init__(self, px_mu, px_var, pi, n_component, variational_pi, name="GMMNormalPrior", **kw):
|
||||||
super(GmmNormalPrior, self).__init__(name=name, **kw)
|
super(GmmNormalPrior, self).__init__(name=name, **kw)
|
||||||
self.n_component = n_component
|
self.n_component = n_component
|
||||||
|
|
||||||
self.px_mu = Param('mu_k', px_mu)
|
self.px_mu = Param('mu_k', px_mu)
|
||||||
self.px_var = Param('var_k', px_var)
|
self.px_var = Param('var_k', px_var)
|
||||||
|
|
||||||
|
|
@ -48,9 +48,9 @@ class GmmNormalPrior(VariationalPrior):
|
||||||
variational_pi = variational_pi / np.sum(variational_pi)
|
variational_pi = variational_pi / np.sum(variational_pi)
|
||||||
pi = pi / np.sum(pi)
|
pi = pi / np.sum(pi)
|
||||||
|
|
||||||
self.pi = pi # p(x) mixing coeffients
|
self.pi = pi # p(x) mixing coeffients
|
||||||
self.variational_pi = Param('variational_pi', variational_pi) # variational mixing coefficients
|
self.variational_pi = Param('variational_pi', variational_pi) # variational mixing coefficients
|
||||||
|
|
||||||
self.check_all_weights()
|
self.check_all_weights()
|
||||||
|
|
||||||
self.link_parameter(self.px_mu)
|
self.link_parameter(self.px_mu)
|
||||||
|
|
@ -58,22 +58,15 @@ class GmmNormalPrior(VariationalPrior):
|
||||||
self.link_parameter(self.variational_pi)
|
self.link_parameter(self.variational_pi)
|
||||||
self.variational_pi.constrain_bounded(0.0, 1.0)
|
self.variational_pi.constrain_bounded(0.0, 1.0)
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
# self.stop = 5
|
|
||||||
=======
|
|
||||||
self.stop = 5
|
self.stop = 5
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
|
|
||||||
def KL_divergence(self, variational_posterior):
|
def KL_divergence(self, variational_posterior):
|
||||||
# Lagrange multiplier maybe also needed here
|
# Lagrange multiplier maybe also needed here
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
# var_mean = np.square(variational_posterior.mean).sum()
|
# var_mean = np.square(variational_posterior.mean).sum()
|
||||||
# var_S = (variational_posterior.variance - np.log(variational_posterior.variance)).sum()
|
# var_S = (variational_posterior.variance - np.log(variational_posterior.variance)).sum()
|
||||||
# return 0.5 * (var_mean + var_S) - 0.5 * variational_posterior.input_dim * variational_posterior.num_data
|
# return 0.5 * (var_mean + var_S) - 0.5 * variational_posterior.input_dim * variational_posterior.num_data
|
||||||
|
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
mu = variational_posterior.mean
|
mu = variational_posterior.mean
|
||||||
S = variational_posterior.variance
|
S = variational_posterior.variance
|
||||||
pi = self.variational_pi
|
pi = self.variational_pi
|
||||||
|
|
@ -88,76 +81,48 @@ class GmmNormalPrior(VariationalPrior):
|
||||||
return 0.5 * (cita[0] - (np.log(S)).sum() + cita[1]) + 0.5 * (cita[2] - total_n) + cita[3]
|
return 0.5 * (cita[0] - (np.log(S)).sum() + cita[1]) + 0.5 * (cita[2] - total_n) + cita[3]
|
||||||
|
|
||||||
def update_gradients_KL(self, variational_posterior):
|
def update_gradients_KL(self, variational_posterior):
|
||||||
<<<<<<< HEAD
|
|
||||||
# import pdb; pdb.set_trace() # breakpoint 1
|
|
||||||
# print("Updating Gradients")
|
|
||||||
# if self.stop<1:
|
|
||||||
# return
|
|
||||||
# self.stop-=1
|
|
||||||
=======
|
|
||||||
import pdb; pdb.set_trace() # breakpoint 1
|
import pdb; pdb.set_trace() # breakpoint 1
|
||||||
print("Updating Gradients")
|
print("Updating Gradients")
|
||||||
if self.stop<1:
|
if self.stop<1:
|
||||||
return
|
return
|
||||||
self.stop-=1
|
self.stop-=1
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
#dL:
|
#dL:
|
||||||
#variational_posterior.mean.gradient -= variational_posterior.mean
|
#variational_posterior.mean.gradient -= variational_posterior.mean
|
||||||
#variational_posterior.variance.gradient -= (1. - (1. / (variational_posterior.variance))) * 0.5
|
#variational_posterior.variance.gradient -= (1. - (1. / (variational_posterior.variance))) * 0.5
|
||||||
|
|
||||||
|
|
||||||
mu = variational_posterior.mean
|
mu = variational_posterior.mean
|
||||||
S = variational_posterior.variance
|
S = variational_posterior.variance
|
||||||
pi = self.variational_pi
|
pi = self.variational_pi
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
cita_0 = np.zeros(mu.shape)
|
|
||||||
cita_1 = np.zeros(mu.shape)
|
|
||||||
cita_2 = np.zeros(mu.shape)
|
|
||||||
cita_3 = np.zeros(pi.shape)
|
|
||||||
for i in range(self.n_component):
|
|
||||||
cita_0 += pi.values[i] * (mu - self.px_mu.values[i]) / self.px_var.values[i]
|
|
||||||
cita_1 += (pi[i] / self.px_var[i])
|
|
||||||
cita_2 += pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i])
|
|
||||||
self.px_mu[i].gradient += pi[i] * (mu - self.px_mu[i]) / self.px_var[i]
|
|
||||||
self.px_var[i].gradient += (pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i]) - (pi[i] / self.px_var[i])) * 0.5
|
|
||||||
cita_3[i] = (np.log(self.px_var[i]).sum() + (S / self.px_var[i]).sum()+ (np.square(mu - self.px_mu[i]) / self.px_var[i]).sum() )* (-0.5) + np.log(self.pi[i] / pi[i]) - 1
|
|
||||||
# self.variational_pi[i].gradient += cita_3[i]
|
|
||||||
|
|
||||||
variational_posterior.mean.gradient -= cita_0
|
|
||||||
variational_posterior.variance.gradient += (1. / (S) - cita_1) * 0.5
|
|
||||||
self.variational_pi.gradient +=cita_3
|
|
||||||
|
|
||||||
=======
|
|
||||||
cita_0 = np.zeros_like(mu)
|
cita_0 = np.zeros_like(mu)
|
||||||
cita_1 = np.zeros_like(mu)
|
cita_1 = np.zeros_like(mu)
|
||||||
cita_2 = np.zeros_like(mu)
|
cita_2 = np.zeros_like(mu)
|
||||||
cita_3 = np.zeros_like(pi)
|
cita_3 = np.zeros_like(pi)
|
||||||
for i in range(self.n_component):
|
for i in range(self.n_component):
|
||||||
|
|
||||||
print("About to change the gradient")
|
print("About to change the gradient")
|
||||||
print pi.values[i]
|
print pi.values[i]
|
||||||
print mu
|
print mu
|
||||||
print self.px_mu.values[i]
|
print self.px_mu.values[i]
|
||||||
print self.px_var.values[i]
|
print self.px_var.values[i]
|
||||||
|
|
||||||
cita_0 += pi.values[i] * (mu - self.px_mu.values[i]) / self.px_var.values[i]
|
cita_0 += pi.values[i] * (mu - self.px_mu.values[i]) / self.px_var.values[i]
|
||||||
print "Has this helped?"
|
print "Has this helped?"
|
||||||
self.px_mu[i].gradient += pi[i] * (mu - self.px_mu[i]) / self.px_var[i]
|
self.px_mu[i].gradient += pi[i] * (mu - self.px_mu[i]) / self.px_var[i]
|
||||||
cita_1 += (pi[i] / self.px_var[i])
|
cita_1 += (pi[i] / self.px_var[i])
|
||||||
cita_2 += pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i])
|
cita_2 += pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i])
|
||||||
self.px_var[i].gradient += (pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i]) - (pi[i] / self.px_var[i])) * 0.5
|
self.px_var[i].gradient += (pi[i] * (S + np.square(mu - self.px_mu[i])) / np.square(self.px_var[i]) - (pi[i] / self.px_var[i])) * 0.5
|
||||||
cita_3[i] = (np.log(self.px_var[i]).sum()
|
cita_3[i] = (np.log(self.px_var[i]).sum()
|
||||||
+ (S / self.px_var[i]).sum()
|
+ (S / self.px_var[i]).sum()
|
||||||
+ (np.square(mu - self.px_mu[i]) / self.px_var[i]).sum() )* (-0.5) + np.log(self.pi[i] / pi[i]) - pi[i] * np.log(self.pi[i] / np.square(pi[i]))
|
+ (np.square(mu - self.px_mu[i]) / self.px_var[i]).sum() )* (-0.5) + np.log(self.pi[i] / pi[i]) - pi[i] * np.log(self.pi[i] / np.square(pi[i]))
|
||||||
self.variational_pi[i].gradient += cita_3[i]
|
self.variational_pi[i].gradient += cita_3[i]
|
||||||
|
|
||||||
variational_posterior.mean.gradient -= cita_0
|
variational_posterior.mean.gradient -= cita_0
|
||||||
variational_posterior.variance.gradient += (1. / (S) - cita_1) * 0.5
|
variational_posterior.variance.gradient += (1. / (S) - cita_1) * 0.5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
def check_weights(self, weights):
|
def check_weights(self, weights):
|
||||||
assert weights.min() >= 0.0
|
assert weights.min() >= 0.0
|
||||||
assert weights.max() <= 1.0
|
assert weights.max() <= 1.0
|
||||||
|
|
@ -167,10 +132,7 @@ class GmmNormalPrior(VariationalPrior):
|
||||||
self.check_weights(self.variational_pi)
|
self.check_weights(self.variational_pi)
|
||||||
self.check_weights(self.pi)
|
self.check_weights(self.pi)
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
class SpikeAndSlabPrior(VariationalPrior):
|
class SpikeAndSlabPrior(VariationalPrior):
|
||||||
def __init__(self, pi=None, learnPi=False, variance = 1.0, group_spike=False, name='SpikeAndSlabPrior', **kw):
|
def __init__(self, pi=None, learnPi=False, variance = 1.0, group_spike=False, name='SpikeAndSlabPrior', **kw):
|
||||||
super(SpikeAndSlabPrior, self).__init__(name=name, **kw)
|
super(SpikeAndSlabPrior, self).__init__(name=name, **kw)
|
||||||
|
|
|
||||||
|
|
@ -52,18 +52,6 @@ class GmmBayesianGPLVM(SparseGP_MPI):
|
||||||
if likelihood is None:
|
if likelihood is None:
|
||||||
likelihood = Gaussian()
|
likelihood = Gaussian()
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
# Need to define what the model is initialised like
|
|
||||||
pi = np.ones(n_component) / float(n_component) # p(k)
|
|
||||||
variational_pi = pi.copy()
|
|
||||||
px_mu = [[]] * n_component
|
|
||||||
px_var = [[]] * n_component
|
|
||||||
for i in range(n_component):
|
|
||||||
px_mu[i] = np.zeros(X_variance.shape)
|
|
||||||
px_var[i] = np.ones(X_variance.shape)
|
|
||||||
|
|
||||||
=======
|
|
||||||
# Need to define what the model is initialised like
|
# Need to define what the model is initialised like
|
||||||
pi = np.ones(n_component) / float(n_component) # p(k)
|
pi = np.ones(n_component) / float(n_component) # p(k)
|
||||||
variational_pi = pi.copy()
|
variational_pi = pi.copy()
|
||||||
|
|
@ -74,7 +62,7 @@ class GmmBayesianGPLVM(SparseGP_MPI):
|
||||||
for i in range(n_component):
|
for i in range(n_component):
|
||||||
px_mu[i] = np.zeros_like(X_variance)
|
px_mu[i] = np.zeros_like(X_variance)
|
||||||
px_var[i] = np.ones_like(X_variance)
|
px_var[i] = np.ones_like(X_variance)
|
||||||
|
|
||||||
|
|
||||||
# print("Should print")
|
# print("Should print")
|
||||||
# print(pi)
|
# print(pi)
|
||||||
|
|
@ -82,7 +70,6 @@ class GmmBayesianGPLVM(SparseGP_MPI):
|
||||||
# print(px_var)
|
# print(px_var)
|
||||||
# print(variational_pi)
|
# print(variational_pi)
|
||||||
# print("Didnt print")
|
# print("Didnt print")
|
||||||
>>>>>>> a43d4b074832a791b7453c454f304eacd478c624
|
|
||||||
self.variational_prior = GmmNormalPrior(px_mu=px_mu, px_var=px_var, pi=pi,
|
self.variational_prior = GmmNormalPrior(px_mu=px_mu, px_var=px_var, pi=pi,
|
||||||
n_component=n_component, variational_pi=variational_pi)
|
n_component=n_component, variational_pi=variational_pi)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue