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"]