def calculate_contraction_ratios(self): print "calculating contraction ratios for ", self.exptype() self.cratios = [] if not self.conf["stack"][0]["twolayer"]: W1 = self.weights["ae_weights-after_pretrain"] b1 = self.weights["ae_bias_h-after_pretrain"] W2 = self.weights["ae_weights1-after_pretrain"] b2 = self.weights["ae_bias_h1-after_pretrain"] else: W1 = self.weights["ae_weights1-after_pretrain"] b1 = self.weights["ae_bias_h1a-after_pretrain"] W2 = self.weights["ae_weights2-after_pretrain"] b2 = self.weights["ae_bias_h2-after_pretrain"] D = mnist.get_test_data()[0] v0 = jacobian_2l(W1, b1, W2, b2, D, only_norm=True)['v'] self.cratios_x = np.arange(1, 40, 1.0) pbar = ProgressBar(maxval=len(self.cratios_x)) for r in self.cratios_x: rnd = np.random.normal(size=D.shape) # norm to one in each row rnd *= r / np.sqrt(np.sum(rnd ** 2, 1))[:, None] v = jacobian_2l(W1, b1, W2, b2, D + rnd, only_norm=True)['v'] self.cratios.append((v0 - v) / r) pbar.update(r) pbar.finish()
def calculate_jacobian(self): if not self.want_weights: return print "calculating spectra for ", self.exptype() D = mnist.get_test_data()[0] if not self.conf["stack"][0]["twolayer"]: W1 = self.weights["ae_weights-after_pretrain"] b1 = self.weights["ae_bias_h-after_pretrain"] W2 = self.weights["ae_weights1-after_pretrain"] b2 = self.weights["ae_bias_h1-after_pretrain"] J = jacobian_2l(W1, b1, W2, b2, D) else: W1 = self.weights["ae_weights1-after_pretrain"] b1 = self.weights["ae_bias_h1a-after_pretrain"] W2 = self.weights["ae_weights2-after_pretrain"] b2 = self.weights["ae_bias_h2-after_pretrain"] J = jacobian_2l(W1, b1, W2, b2, D) self.spec = J["s"] self.spec_std = J["s_std"]