def visualize_gibbs_result(self, start_x, gibbs_steps, filename): # Run minibatch_size chains for gibbs_steps x_samples = None if not start_x is None: x_samples = self.crbm.gibbs_samples_from(start_x, gibbs_steps) else: x_samples = self.crbm.random_gibbs_samples(gibbs_steps) x_samples = x_samples.reshape((self.minibatch_size, 28*28)) tile = tile_raster_images(x_samples, self.image_size, (1, self.minibatch_size), output_pixel_vals=True) filepath = os.path.join(IMAGE_OUTPUT_DIR, filename+".png") img = Image.fromarray(tile) img.save(filepath) print "Result of running Gibbs", \ gibbs_steps, "times outputed to", filepath
def visualize_filters(self, filename): cp = self.cp # filter size fsz = (cp.height_filters, cp.width_filters) tile_shape = (cp.num_filters, cp.num_input_planes) filters_flattened = self.crbm.W.value.reshape( (tile_shape[0]*tile_shape[1], fsz[0]*fsz[1])) tile = tile_raster_images(filters_flattened, fsz, tile_shape, output_pixel_vals=True) filepath = os.path.join(IMAGE_OUTPUT_DIR, filename+".png") img = Image.fromarray(tile) img.save(filepath) print "Filters (as images) outputed to", filepath
def sample_from_rbm(self, gibbs_steps, test_set_x): # find out the number of test samples number_of_test_samples = test_set_x.value.shape[0] # pick random test examples, with which to initialize the persistent chain test_idx = rng.randint(number_of_test_samples - 20) persistent_vis_chain = theano.shared(test_set_x.value[test_idx : test_idx + 20]) # define one step of Gibbs sampling (mf = mean-field) [hid_mf, hid_sample, vis_mf, vis_sample] = self.rbm.gibbs_vhv(persistent_vis_chain) # the sample at the end of the channel is returned by ``gibbs_1`` as # its second output; note that this is computed as a binomial draw, # therefore it is formed of ints (0 and 1) and therefore needs to # be converted to the same dtype as ``persistent_vis_chain`` vis_sample = T.cast(vis_sample, dtype=theano.config.floatX) # construct the function that implements our persistent chain # we generate the "mean field" activations for plotting and the actual samples for # reinitializing the state of our persistent chain sample_fn = theano.function([], [vis_mf, vis_sample], updates={persistent_vis_chain: vis_sample}) # sample the RBM, plotting every `plot_every`-th sample; do this # until you plot at least `n_samples` n_samples = 10 plot_every = 1000 for idx in xrange(n_samples): # do `plot_every` intermediate samplings of which we do not care for jdx in xrange(plot_every): vis_mf, vis_sample = sample_fn() # construct image image = PIL.Image.fromarray( tile_raster_images(X=vis_mf, img_shape=(28, 28), tile_shape=(10, 10), tile_spacing=(1, 1)) ) image.save("sample_%i_step_%i.png" % (idx, idx * jdx))