def run_sequence(sequence=0): log.info("Creating RNN-GSN for sequence %d!" % sequence) # grab the MNIST dataset mnist = MNIST(sequence_number=sequence, concat_train_valid=True) outdir = "outputs/rnngsn/mnist_%d/" % sequence rng = numpy.random.RandomState(1234) mrg = RandomStreams(rng.randint(2**30)) rnngsn = RNN_GSN(layers=2, walkbacks=4, input_size=28 * 28, hidden_size=1000, tied_weights=True, rnn_hidden_size=100, weights_init='uniform', weights_interval='montreal', rnn_weights_init='identity', mrg=mrg, outdir=outdir) # load pretrained rbm on mnist # rnngsn.load_gsn_params('outputs/trained_gsn_epoch_1000.pkl') # make an optimizer to train it (AdaDelta is a good default) optimizer = AdaDelta(model=rnngsn, dataset=mnist, n_epoch=200, batch_size=100, minimum_batch_size=2, learning_rate=1e-6, save_frequency=1, early_stop_length=200) # optimizer = SGD(model=rnngsn, # dataset=mnist, # n_epoch=300, # batch_size=100, # minimum_batch_size=2, # learning_rate=.25, # lr_decay='exponential', # lr_factor=.995, # momentum=0.5, # nesterov_momentum=True, # momentum_decay=False, # save_frequency=20, # early_stop_length=100) crossentropy = Monitor('crossentropy', rnngsn.get_monitors()['noisy_recon_cost'], test=True) error = Monitor('error', rnngsn.get_monitors()['mse'], test=True) # perform training! optimizer.train(monitor_channels=[crossentropy, error]) # use the generate function! log.debug("generating images...") generated, ut = rnngsn.generate(initial=None, n_steps=400) # Construct image image = Image.fromarray( tile_raster_images(X=generated, img_shape=(28, 28), tile_shape=(20, 20), tile_spacing=(1, 1))) image.save(outdir + "rnngsn_mnist_generated.png") log.debug('saved generated.png') # Construct image from the weight matrix image = Image.fromarray( tile_raster_images(X=rnngsn.weights_list[0].get_value(borrow=True).T, img_shape=(28, 28), tile_shape=closest_to_square_factors( rnngsn.hidden_size), tile_spacing=(1, 1))) image.save(outdir + "rnngsn_mnist_weights.png") log.debug("done!") del mnist del rnngsn del optimizer
def run_midi(dataset): log.info("Creating RNN-GSN for dataset %s!", dataset) outdir = "outputs/rnngsn/%s/" % dataset # grab the MIDI dataset if dataset == 'nottingham': midi = Nottingham() elif dataset == 'jsb': midi = JSBChorales() elif dataset == 'muse': midi = MuseData() elif dataset == 'piano_de': midi = PianoMidiDe() else: raise AssertionError("dataset %s not recognized." % dataset) # rng = numpy.random # rng.seed(0xbeef) # mrg = RandomStreams(seed=rng.randint(1 << 30)) rng = numpy.random.RandomState(1234) mrg = RandomStreams(rng.randint(2 ** 30)) rnngsn = RNN_GSN(layers=2, walkbacks=4, input_size=88, hidden_size=150, rnn_hidden_size=100, weights_init='gaussian', weights_std=0.01, rnn_weights_init='identity', rnn_hidden_activation='relu', rnn_weights_std=0.0001, mrg=mrg, outdir=outdir) # make an optimizer to train it optimizer = AdaDelta(model=rnngsn, dataset=midi, epochs=200, batch_size=100, min_batch_size=2, # learning_rate=1e-4, learning_rate=1e-6, save_freq=1, stop_patience=100) ll = Monitor('crossentropy', rnngsn.get_monitors()['noisy_recon_cost'],test=True) mse = Monitor('frame-error', rnngsn.get_monitors()['mse'],train=True,test=True,valid=True) plot = Plot(bokeh_doc_name='rnngsn_midi_%s'%dataset, monitor_channels=[ll,mse],open_browser=True) # perform training! optimizer.train(plot=plot) # use the generate function! generated, _ = rnngsn.generate(initial=None, n_steps=200) dt = 0.3 r = (21, 109) midiwrite(outdir + 'rnngsn_generated_midi.mid', generated, r=r, dt=dt) if has_pylab: extent = (0, dt * len(generated)) + r pylab.figure() pylab.imshow(generated.T, origin='lower', aspect='auto', interpolation='nearest', cmap=pylab.cm.gray_r, extent=extent) pylab.xlabel('time (s)') pylab.ylabel('MIDI note number') pylab.title('generated piano-roll') # Construct image from the weight matrix image = Image.fromarray( tile_raster_images( X=rnngsn.weights_list[0].get_value(borrow=True).T, img_shape=closest_to_square_factors(rnngsn.input_size), tile_shape=closest_to_square_factors(rnngsn.hidden_size), tile_spacing=(1, 1) ) ) image.save(outdir + 'rnngsn_midi_weights.png') log.debug("done!") del midi del rnngsn del optimizer if has_pylab: pylab.show()