def dpp_dropout(self, dropoutProb): if dropoutProb == 0: return W_n = self.W[0:-1, :] L = (W_n.dot(W_n.T))**2 D, V = dpp.decompose_kernel(L) k = int(np.floor((1-dropoutProb)*self.W.shape[0])) J = dpp.sample_k(k, D, V) d_idx = np.ones((self.W.shape[0]-1, 1)) d_idx[J.astype(int)] = 0 self.prevZ[:, 0:-1] = self.prevZ[:, 0:-1]*d_idx.T
def dpp_dropin_norm(self, dropoutProb): if dropoutProb == 0: return W_n = self.W[0:-1, :]/(np.atleast_2d(np.linalg.norm(self.W[0:-1, :], axis=1)).T) L = (W_n.dot(W_n.T))**2 D, V = dpp.decompose_kernel(L) k = int(np.floor((1-dropoutProb)*self.W.shape[0])) J = dpp.sample_k(k, D, V) d_idx = np.zeros((self.W.shape[0]-1, 1)) d_idx[J.astype(int)] = 1 self.prevZ[:, 0:-1] = self.prevZ[:, 0:-1]*d_idx.T
k = 100 # Randomly sample k points idx = np.arange(x.size) np.random.shuffle(idx) x_uniform = x[idx[:k]] y_uniform = y[idx[:k]] # Sample a k-DPP # First construct a Gaussian L-ensemble sigma = 0.1 L = np.exp(- ( np.power(x - x[:, None], 2) + np.power(y - y[:, None], 2) )/(sigma**2)) (s, logdet) = np.linalg.slogdet(L) D, V = dpp.decompose_kernel(L) Y = dpp.sample_k(k, D, V) print "Done Gaussian!" L = np.power(np.outer(x, x)+np.outer(y, y), 2) D, V = dpp.decompose_kernel(L) Y2 = dpp.sample_k(k, D, V) # Plot both plt.figure(1) plt.subplot(1, 3, 1) plt.plot(x_uniform, y_uniform, 'ro') plt.title('Uniform') plt.subplot(1, 3, 2) plt.title('DPP (Gaussian Similarity)') plt.plot(x[Y.astype(int)], y[Y.astype(int)], 'bo')
y.append(math.sin(a)) x = np.array(x) y = np.array(y) k = 50 idx = np.arange(x.size) np.random.shuffle(idx) x_uniform = x[idx[:k]] y_uniform = y[idx[:k]] sigma = 0.1 L = np.exp(- ( np.power(x - x[:, None], 2) + np.power(y - y[:, None], 2) )/(sigma**2)) D, V = np.linalg.eig(L.T) Y = dpp.sample_k(k, np.real(D), np.real(V)) L = np.power(np.outer(x, x)+np.outer(y, y), 2) D, V = np.linalg.eig(L.T) Y2 = dpp.sample_k(k, np.real(D), np.real(V)) plt.figure(1) plt.subplot(1, 3, 1) plt.plot(x_uniform, y_uniform, 'ro') plt.xlim([-1.2, 1.2]) plt.ylim([-1.2, 1.2]) plt.title('Uniform') plt.subplot(1, 3, 2) plt.title('DPP (Gaussian Similarity)') plt.plot(x[Y.astype(int)], y[Y.astype(int)], 'bo')
def select_batch(self, batch_size): chosen = list(map(int, dpp.sample_k(batch_size, self.dppD, self.dppV))) return chosen
k = 100 # Randomly sample k points idx = np.arange(x.size) np.random.shuffle(idx) x_uniform = x[idx[:k]] y_uniform = y[idx[:k]] # Sample a k-DPP # First construct a Gaussian L-ensemble sigma = 0.1 L = np.exp(-(np.power(x - x[:, None], 2) + np.power(y - y[:, None], 2)) / (sigma**2)) (s, logdet) = np.linalg.slogdet(L) D, V = dpp.decompose_kernel(L) Y = dpp.sample_k(k, D, V) print "Done Gaussian!" L = np.power(np.outer(x, x) + np.outer(y, y), 2) D, V = dpp.decompose_kernel(L) Y2 = dpp.sample_k(k, D, V) # Plot both plt.figure(1) plt.subplot(1, 3, 1) plt.plot(x_uniform, y_uniform, 'ro') plt.title('Uniform') plt.subplot(1, 3, 2) plt.title('DPP (Gaussian Similarity)') plt.plot(x[Y.astype(int)], y[Y.astype(int)], 'bo')