def plot_reference_spiral_for_ICLR_paper(simulated_frames_output_dir, n_simulated_samples, n_iter): # Plot the reference graph for the ICLR paper. import debian_spiral original_spiral_samples = debian_spiral.sample( n_simulated_samples * n_iter, 0.0).reshape((1, -1, 2)) write_simulated_samples_frames( original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_0.5.png"), window_width=0.5) write_simulated_samples_frames( original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_1.0.png"), window_width=1.0) write_simulated_samples_frames( original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_2.0.png"), window_width=2.0) # plot_reference_spiral_for_ICLR_paper("/u/alaingui/Documents/tmp/14", 100, 100) # python dae_langevin_sampling.py $HOME/umontreal/denoising_autoencoder/plots/experiment_970584/results.pkl $HOME/Documents/tmp/1 # ffmpeg -i /u/alaingui/Documents/tmp/4/simulation_frame_%05d.png -vcodec mpeg4 /u/alaingui/Documents/tmp/4/sequence.avi
def plot_spiral_into_axes(axes): from matplotlib.lines import Line2D import debian_spiral N = 80 spiral_samples = debian_spiral.sample(N, 0.0, want_sorted_data = True, want_evenly_spaced = True) for i in range(N-1): l = Line2D([spiral_samples[i,0],spiral_samples[i+1,0]], [spiral_samples[i,1],spiral_samples[i+1,1]], linestyle='--', linewidth=1.0, c='#f9a21d') axes.add_line(l)
def plot_spiral_into_axes(axes): from matplotlib.lines import Line2D import debian_spiral N = 80 spiral_samples = debian_spiral.sample(N, 0.0, want_sorted_data=True, want_evenly_spaced=True) for i in range(N - 1): l = Line2D([spiral_samples[i, 0], spiral_samples[i + 1, 0]], [spiral_samples[i, 1], spiral_samples[i + 1, 1]], linestyle='--', linewidth=1.0, c='#f9a21d') axes.add_line(l)
def compare_gradients(self, input_noise_scale = 1.0, use_spiral = False): if use_spiral: if not (self.mydae.n_visibles == 2): print "It doesn't make sense to ask to use the spiral if you don't have 2 input units." assert(self.mydae.n_visibles == 2) import debian_spiral N = 10 (X0,Y0) = debian_spiral.sample(N, 0.0) X = numpy.vstack((X0,Y0)).T else: N = 10 X = numpy.zeros((N, self.n_visibles)) if input_noise_scale > 0: noise = numpy.random.normal(scale = input_noise_scale, size = X.shape) else: noise = numpy.zeros(X.shape) noisy_X = X + noise dae_grad_W, dae_grad_b, dae_grad_c = self.mydae.theano_gradients(self.mydae.W, self.mydae.b, self.mydae.c, noisy_X, X) ref_grad_W, ref_grad_b, ref_grad_c = reference_gradients(self.mydae.W, self.mydae.b, self.mydae.c, noisy_X, X) print "--- ref ---" print ref_grad_W print ref_grad_b print ref_grad_c print "--- dae ---" print dae_grad_W print dae_grad_b print dae_grad_c # We scaled the output of the tanh for the DAE. # That results in all the gradients being multiplied # by 4 so we have to correct for this. alpha = self.mydae.output_scaling_factor ** 2 assert_total_difference(self.test, dae_grad_W, alpha * ref_grad_W, 0.01) assert_total_difference(self.test, dae_grad_b, alpha * ref_grad_b, 0.01) assert_total_difference(self.test, dae_grad_c, alpha * ref_grad_c, 0.01)
def plot_reference_spiral_for_ICLR_paper(simulated_frames_output_dir, n_simulated_samples, n_iter): # Plot the reference graph for the ICLR paper. import debian_spiral original_spiral_samples = debian_spiral.sample(n_simulated_samples * n_iter, 0.0).reshape((1,-1,2)) write_simulated_samples_frames(original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_0.5.png"), window_width=0.5) write_simulated_samples_frames(original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_1.0.png"), window_width=1.0) write_simulated_samples_frames(original_spiral_samples, lambda i: os.path.join(simulated_frames_output_dir, "original_spiral_samples_width_2.0.png"), window_width=2.0) # plot_reference_spiral_for_ICLR_paper("/u/alaingui/Documents/tmp/14", 100, 100) # python dae_langevin_sampling.py $HOME/umontreal/denoising_autoencoder/plots/experiment_970584/results.pkl $HOME/Documents/tmp/1 # ffmpeg -i /u/alaingui/Documents/tmp/4/simulation_frame_%05d.png -vcodec mpeg4 /u/alaingui/Documents/tmp/4/sequence.avi
def get_starting_point_for_spiral(): import debian_spiral spiral_samples = debian_spiral.sample(1000, 0.0, want_sorted_data=True) return spiral_samples[0, :]
# Now that we fix the training data, we have to insist # on the difference between original data and noisy replicated # versions of that original data. if 'n_spiral_original_samples' not in override_params.keys(): n_spiral_original_samples = 1000 else: n_spiral_original_samples = override_params['n_spiral_original_samples'] if 'spiral_samples_noise_stddev' not in override_params.keys(): spiral_samples_noise_stddev = 0.0 else: spiral_samples_noise_stddev = override_params[ 'spiral_samples_noise_stddev'] angle_restriction = 1.0 original_data = debian_spiral.sample(n_spiral_original_samples, spiral_samples_noise_stddev, want_sorted_data=False, angle_restriction=angle_restriction) replication_factor = 10 n_spiral_replicated_samples = n_spiral_original_samples * replication_factor if 'train_noise_stddev' not in override_params.keys(): train_noise_stddev = 0.01 else: train_noise_stddev = override_params['train_noise_stddev'] clean_data = np.tile(original_data, (replication_factor, 1)) np.random.shuffle(clean_data) noisy_data = clean_data + np.random.normal(size=clean_data.shape, scale=train_noise_stddev) # 5% of the values will have noise 10 times as larger applied to them
import dae_theano #dae_theano = reload(dae_theano) mydae = dae_theano.DAE(n_hiddens=56, epochs=1000, learning_rate=0.01, prob_large_noise=0.000, large_noise_sigma=1.0, jacobi_penalty=0.01, batch_size=25) import debian_spiral import numpy n_spiral_samples = 2000 spiral_samples_noise = 0.01 (X,Y) = debian_spiral.sample(n_spiral_samples, spiral_samples_noise) data = numpy.vstack((X,Y)).T mydae.fit(data, verbose=True) mydae.set_params_to_best_noisy() # print "mydae.W is " # print mydae.W # print "mydae.b is " # print mydae.b # print "mydae.c is " # print mydae.c # print data
def get_starting_point_for_spiral(): import debian_spiral spiral_samples = debian_spiral.sample(1000, 0.0, want_sorted_data = True) return spiral_samples[0,:]